




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、分類號(hào):分類號(hào):TP31TP31 U U D D C C:D10621-408-(2014)1248-0D10621-408-(2014)1248-0密密 級(jí):公級(jí):公 開開 編編 號(hào):號(hào):成成 都都 信信 息息 工工 程程 學(xué)學(xué) 院院學(xué)學(xué) 位位 論論 文文Frozen 游戲設(shè)計(jì)與實(shí)現(xiàn)游戲設(shè)計(jì)與實(shí)現(xiàn)論文作者姓名:論文作者姓名:申請(qǐng)學(xué)位專業(yè):申請(qǐng)學(xué)位專業(yè):數(shù)字媒體技術(shù)數(shù)字媒體技術(shù)申請(qǐng)學(xué)位類別:申請(qǐng)學(xué)位類別:指指導(dǎo)導(dǎo)教教師師姓姓名名(職職稱稱):論文提交日期:論文提交日期:Frozen 游戲設(shè)計(jì)與實(shí)現(xiàn)游戲設(shè)計(jì)與實(shí)現(xiàn)摘摘 要要為了學(xué)習(xí) Unity3D 游戲引擎,為了進(jìn)一步了解并熟悉該款引擎,本文描述
2、了如何制作了一個(gè)二維的跑酷類游戲項(xiàng)目,這個(gè)游戲的背景來源于一部叫做冰雪奇緣的電影。通過對(duì)該項(xiàng)目的制作和學(xué)習(xí),來了解用 Unity3D 開發(fā)游戲的利與弊,以及這款游戲引擎未來的優(yōu)勢(shì)。本文所述的游戲項(xiàng)目開發(fā)所用的開發(fā)工具是 Unity3D 自帶的開發(fā)工具,叫做 MonoBehaviour,選擇的開發(fā)語言是 C#。該游戲項(xiàng)目是一個(gè)小型的 2D 游戲制作,開發(fā)周期短,實(shí)現(xiàn)所涉及的技術(shù)也是學(xué)習(xí) Unity3D 必備的一些知識(shí),但是也是一些重要的基礎(chǔ)知識(shí),很多其他的 Unity3D 游戲制作,也是通過把 Unity3D 的各個(gè)功能模塊一點(diǎn)點(diǎn)組織拼接起來而成的。關(guān)鍵詞關(guān)鍵詞:Unity3D;游戲引擎;語言開
3、發(fā)環(huán)境;跑酷游戲the Design and Implementation of Frozen GameAbstractIn order to know and learn more about Unity3D game engine, this papers describes how I develop a parkour game project whose background comes from a movie called Frozen. Through the study of this game project, we will get to know the pros an
4、d cons to use the game engine and its advantage of the future. We did this game project using its own development tool named MonoBehaviour. we used C# as its development language. This is a small 2D game with short development period and some basic techniques which are important knowledge.Many other
5、 Unity3D games are the union of some Unity3D function parts.Key words: Unity3D; game engine; language development environment; parkour game目目 錄錄論文總頁數(shù):281引言.11.1UNITY3D 簡(jiǎn)介.11.2UNITY3D 語言開發(fā)環(huán)境及開發(fā)工具.21.3UNITY3D 應(yīng)用.21.4UNITY3D 未來優(yōu)勢(shì).42使用 UNITY3D 開發(fā)游戲的優(yōu)勢(shì) .42.1跨平臺(tái)的先進(jìn)技術(shù).42.2輕松入門.52.3市場(chǎng)影響力廣.53研究現(xiàn)狀及設(shè)計(jì)目標(biāo).63.1游戲
6、簡(jiǎn)介及動(dòng)畫制作.63.2游戲類型.73.3游戲前景.73.4技術(shù)實(shí)現(xiàn)及其優(yōu)勢(shì).83.5游戲項(xiàng)目設(shè)計(jì)目標(biāo).84需要解決的問題.94.1游戲項(xiàng)目中要解決的問題.94.2碰撞檢測(cè)問題.94.3粒子系統(tǒng).104.4函數(shù).115游戲總體設(shè)計(jì).135.1游戲設(shè)計(jì)準(zhǔn)備階段.135.2游戲設(shè)計(jì)制作階段.145.3游戲設(shè)計(jì)完成階段.145.4游戲玩法說明.166游戲簡(jiǎn)介.166.1游戲背景.166.2敵人.166.3玩家.166.4分?jǐn)?shù)統(tǒng)計(jì).167游戲?qū)崿F(xiàn).167.1變量.16第 1 頁 共 33 頁7.2函數(shù).177.3粒子系統(tǒng)的實(shí)現(xiàn).197.4碰撞檢測(cè)的實(shí)現(xiàn).217.5音效的實(shí)現(xiàn).217.6游戲通關(guān).227
7、.7游戲失敗.238項(xiàng)目總結(jié).238.1總結(jié)的目的.238.2關(guān)鍵性問題總結(jié).238.3游戲開發(fā)周期.23結(jié) 束 語.25參考文獻(xiàn).26致 謝.27聲 明.28第 1 頁 共 33 頁1 1 引言引言1.11.1 Unity3D 簡(jiǎn)介簡(jiǎn)介Unity3D 是由 Unity Technologies 開發(fā)的一個(gè)游戲引擎,操作界面如下圖1.1 所示,它集快速性交互性于一體,帶有強(qiáng)大的渲染引擎,對(duì)DirectX、OpenGL 擁有高度優(yōu)化的圖形渲染管道,能夠允許開發(fā)者能夠高效直觀的開發(fā)出 2D 或者 3D 游戲,是一個(gè)全面整合的游戲引擎。并且,Unity3D 游戲引擎能夠十分方便的將開發(fā)出的游戲發(fā)布到
8、各個(gè)平臺(tái),如iPhone、Android 等 平臺(tái)。此外,還可以用 Unity Web Player 插件將作品發(fā)布成網(wǎng)頁游戲,玩家只需下載這個(gè)很小的插件就能輕輕松松的玩 Unity 網(wǎng)頁版游戲。Unity3D 游戲引擎通過使用植被系統(tǒng) Unitree,提供了大量的 Shader 供開發(fā)者使用,這些 Shader 完全足以滿足開發(fā)者的需求,使得即使在低端硬件設(shè)備下也 能 夠運(yùn)行廣闊茂盛的植被景觀。打開地形編輯器,從左到右依次是:地形拉 升降低、準(zhǔn)確的繪制地形高度、地形圓滑、地形文理繪制、地形植被繪制樹木、地形植被繪制-草及小物體、地形參數(shù)設(shè)置。另外,它支持所有主要 的文件格式,并能和其他應(yīng)用程
9、序協(xié)同工作。它還用了 PhysX 的物理引擎,使得開發(fā)者能夠輕松的實(shí)現(xiàn)各種物理效果。Unity 游戲引擎提供了柔和陰影與烘焙的高度完善的光影渲染系統(tǒng),它的著色器整合了易用性、靈活性和高性能的特點(diǎn)。目前,Unity3D 游戲引擎最新版本是 Unity4.0,它能將你的作品發(fā)布到MAC、Windows、安卓等十個(gè)以上當(dāng)今盛行的平臺(tái)。此外,購買功能更加強(qiáng)大的正版 Unity3D 游戲引擎,經(jīng)授權(quán)之后可以安裝在 2 個(gè)不同的系統(tǒng),如一個(gè)Windows,一個(gè) Mac,官方網(wǎng)址是 。Unity3D 游戲引擎研討會(huì)正在茁壯發(fā)展。第一次 Unity3D 游戲引擎研討 會(huì)是在 2010 年 5 月,舉辦地點(diǎn)是在
10、韓國,引發(fā)了許許多多的商家投資并簽訂了引擎預(yù)定協(xié)議。亞洲作為 Unity3D 游戲引擎公司的一個(gè)重要戰(zhàn)略地,2013 年在上海舉辦了研討會(huì)。不久 Unity3D 游戲引擎公司又宣布取消支持對(duì) Flash 的支持。第 2 頁 共 33 頁圖 1.1 Unity3D 操作界面1.21.2 Unity3D 語言開發(fā)環(huán)境及開發(fā)工具語言開發(fā)環(huán)境及開發(fā)工具Unity3D 是一款綜合型的游戲開發(fā)引擎。其中 MonoBehaviour 是該公司 自己開發(fā)的一個(gè)編譯工具,自然跟 Unity3D 是十分兼容的,比如調(diào)試等就十分方便。當(dāng)然,也可以選擇自己的編譯工具,如 Visual Studio 2010,只需要在
11、菜單里面設(shè)置一下默認(rèn)編譯工具就行,這樣在你創(chuàng)建并打開代碼文檔時(shí)就默認(rèn)打開了你所設(shè)置的編譯工具。目前,Unity3D 只允許 3 種編程語言:C#、javascript、Mobo。其中 C#運(yùn)用較為廣泛,因?yàn)樗募嫒菪员容^好,便于更好的發(fā)布到各個(gè)平臺(tái)。1.31.3 Unity3D 應(yīng)用應(yīng)用目前,用 Unity3D 游戲設(shè)計(jì)引擎開發(fā)手機(jī)游戲的比較多,如勇者之心、 神廟逃亡系列、憤怒的小鳥等;也有用來開發(fā)單機(jī)游戲的,如軒轅劍六、搗蛋豬等;網(wǎng)頁游戲諸如新仙劍 Online、QQ 樂團(tuán)等,部分游戲截圖如圖1.2、1.3、1.4 所示。在虛擬現(xiàn)實(shí)方面,只需要將在 Maya 或者 Max 等其他三維軟件里面
12、做出的模型導(dǎo)出為 fbx 格式,然后導(dǎo)入 Unity3D,設(shè)置攝像機(jī)代碼、UI、Build。第 3 頁 共 33 頁圖 1.2 神廟逃亡圖 1.3 憤怒的小鳥第 4 頁 共 33 頁圖 1.4 軒轅劍1.41.4 Unity3D 未來優(yōu)勢(shì)未來優(yōu)勢(shì)很多游戲引擎起初都是很不起眼的,Unity 在 2004 年誕生于丹麥,后來 把總部設(shè)在了美國舊金山。到 2014 年,其注冊(cè)人數(shù)已達(dá) 80 萬,僅是蘋果應(yīng)用商店里面用 Unity 開發(fā)的游戲已達(dá)一千五百多個(gè)。在未來,隨著Web、IOS、Android 等平臺(tái)越來越廣泛的應(yīng)用,因它強(qiáng)悍的跨平臺(tái)能力和易學(xué)的功能界,Unity3D 游戲設(shè)計(jì)引擎必將變大炙手
13、可熱。Unity3D 是開發(fā)者使用最廣的游戲引擎,目前有 53.1%的開發(fā)所開發(fā)的游戲是通過 Unity3D 游戲引擎來開發(fā)制作的,其中在一項(xiàng)調(diào)查中顯示,開發(fā)選擇這款引擎一個(gè)最重要的因素是它的開發(fā)周期短。之所以這樣,是因?yàn)樗麄兌加X得Unity3D 游戲引擎簡(jiǎn)單易學(xué),功能強(qiáng)大;有一定程序基礎(chǔ)的人只需要一兩個(gè)月就能入門。2使用使用 Unity3D 開發(fā)游戲的優(yōu)勢(shì)開發(fā)游戲的優(yōu)勢(shì)2.12.1 跨平臺(tái)的先進(jìn)技術(shù)跨平臺(tái)的先進(jìn)技術(shù)Unity3D 開發(fā)的游戲和應(yīng)用主要使用的是 C#語言,當(dāng)然前面介紹的其他的2 種語言也可以,其編譯的過程根據(jù)目標(biāo)平臺(tái)的變化而不盡相同。在 PC、Mac第 5 頁 共 33 頁和
14、Android 平臺(tái)上,你所寫的代碼會(huì)被系統(tǒng)編譯成字節(jié)碼,并且可以在 Runtime用 JIT(Just In Time 的縮寫,中文意思是即時(shí)編譯器)編譯器執(zhí)行。如果是在其他的平臺(tái)上,那么游戲在執(zhí)行是代碼是需要進(jìn)行一個(gè)預(yù)編譯的,轉(zhuǎn)變成目標(biāo)機(jī)器的本地代碼而執(zhí)行。這就是為什么 Unity3D 開發(fā)的游戲能夠支持多平臺(tái),能夠發(fā)布到近十幾種十分流行的平臺(tái)上去,如下面圖 2.1 所示:圖 2.1 Unity3D 多平臺(tái)性2.22.2 輕松入門輕松入門目前為止,注冊(cè) Unity3D 用戶已達(dá)八十多萬,每天在線人數(shù)達(dá)二十多萬,你如果在學(xué)習(xí)使用 Unity3D 的時(shí)候可以隨時(shí)上官網(wǎng)論壇上去請(qǐng)求幫助。更重要的
15、一點(diǎn)是你所遇到的問題,其實(shí)在之前很多人都遇到過,這樣你的問題就很快能得到解決。另外,Unity3D 的交互性特點(diǎn)可以讓你即使程序基礎(chǔ)不是很好也能設(shè)計(jì)出你想要的游戲。比如有一個(gè) 2D 游戲叫挺過 1 分鐘,游戲場(chǎng)景只有一個(gè),就是一個(gè)封閉的長方形界面,一個(gè)人物左右移動(dòng)躲避一個(gè)在理想狀態(tài)下在長方形里面彈來彈去的球,隨著時(shí)間的增加,球的數(shù)量也會(huì)增加。這里涉及到的基礎(chǔ)知識(shí)只有幾點(diǎn),如碰撞檢測(cè)、物理引擎,游戲大小只有幾 KB,但是這個(gè)游戲卻很有趣,吸引力不少人,可以在無聊之際用來打發(fā)時(shí)間。2.32.3 市場(chǎng)影響力廣市場(chǎng)影響力廣現(xiàn)在不管是哪行哪業(yè),什么產(chǎn)品,都將就一個(gè)客戶需求量,也就是市場(chǎng),那么 Unity
16、3D 的市場(chǎng)怎么樣呢?同諸多游戲引擎不同的是,Unity3D 不僅僅處在 3D 游戲市場(chǎng),也能夠制作完美的 2D 游戲,Unity3D 支持很多平臺(tái)(Windows、IOS、Mac 等十余種) ,還支持許多游戲機(jī)(PS3、Wii 等) ,以及瀏覽器等等,市場(chǎng)范圍是如此之廣。第 6 頁 共 33 頁在一項(xiàng)調(diào)查中顯示,一個(gè)開發(fā)者在開發(fā)一個(gè) 3D 游戲的時(shí)候,有 72%的人首選的開發(fā)工具是 Unity3D。他們往往還選擇用 Unity3D 做一下視覺結(jié)構(gòu)、軍事仿真等等。3 3研究現(xiàn)狀及設(shè)計(jì)目標(biāo)研究現(xiàn)狀及設(shè)計(jì)目標(biāo)3.13.1 游戲簡(jiǎn)介及動(dòng)畫制作游戲簡(jiǎn)介及動(dòng)畫制作游戲項(xiàng)目開發(fā)的游戲名稱為Frozen ,
17、使用的游戲引擎為 Unity3D,開發(fā)周期大約一個(gè)多月,代碼文件 16 個(gè),開發(fā)語言為 C#。游戲共有 6 個(gè)場(chǎng)景,分別是開始場(chǎng)景、選關(guān)場(chǎng)景、關(guān)卡 1、關(guān)卡 2、勝利場(chǎng)景、游戲介紹場(chǎng)景,沒有失敗場(chǎng)景,失敗的時(shí)候是繪制了一個(gè)窗口,讓玩家選擇是重新游戲或者退出游戲。游戲也有用到 Unity3D 動(dòng)畫制作的功能,如游戲人物的跳躍,開始界面等,這里將游戲動(dòng)畫介紹一下,下面就不在敘述了。選中需要做動(dòng)畫的一個(gè)游戲?qū)ο?,然后選擇 Window-Animation,進(jìn)入動(dòng)畫編輯窗口,如下圖 3.1 所示:圖 3.1 動(dòng)畫編輯窗口做動(dòng)畫之前應(yīng)該先存儲(chǔ)這個(gè)動(dòng)畫原件,點(diǎn)擊紅色的圓形按鈕,并為動(dòng)畫取好名稱,存儲(chǔ)在 A
18、nimation 目錄下。然后在需要改變的屬性上面右擊,添加關(guān)鍵幀,改變響應(yīng)屬性,點(diǎn)擊運(yùn)行按鈕,動(dòng)畫變完成了。需要注意的是,我們?cè)谌宋飫?dòng)畫做的是一個(gè)按空格鍵跳動(dòng)的動(dòng)畫,而不是讓他一直跳,那么就需要代碼控制了,如下:void Start ()transform.animation.Stop();void Update()if(Input.GetKeyDown(“space”)第 7 頁 共 33 頁transform.animation.Play();3.23.2 游戲類型游戲類型游戲項(xiàng)目所開發(fā)的游戲名稱為Frozen ,游戲操作十分簡(jiǎn)單,空格鍵跳躍來躲避雪球或者奪取雪花,Q 鍵發(fā)射飛鏢擊殺敵人
19、。按游戲類型來分,本游戲?qū)儆谝环N冒險(xiǎn)類游戲(Adventure Game) ,也是一種跑酷類游戲,主要考察玩家的操作和對(duì)未知是好奇之心,引發(fā)他們的互動(dòng)性。按游戲內(nèi)容來分,本游戲?qū)儆谝环N探索類游戲,通過不同的關(guān)卡,玩家可以通過不同的方式來獲得游戲分?jǐn)?shù),不停的進(jìn)行探索。按游戲載體來分,本游戲?qū)儆陔娮宇愑螒?。按游戲平臺(tái)來分,本游戲可以發(fā)布到十多個(gè)平臺(tái),具有廣大的平臺(tái)系統(tǒng)。按玩家人數(shù)來分,本游戲?qū)儆趩稳嗣半U(xiǎn)過關(guān)游戲,是一個(gè)單機(jī)游戲。3.33.3 游戲前景游戲前景如今手機(jī)游戲正在蓬勃發(fā)展,屬于一種朝陽行業(yè),而且本游戲的設(shè)計(jì)背景又源自于一部風(fēng)靡全球的美國動(dòng)畫片F(xiàn)rozen ,電影海報(bào)如圖 3.2 所示,當(dāng)
20、用戶看見這個(gè)名字時(shí)會(huì)不經(jīng)意的去下載它。就客戶量來說,隨著這部電影的喜愛著的增加,加上手機(jī)用戶量龐大,因此本游戲具有它的客戶量。就經(jīng)濟(jì)效益來說,游戲開發(fā)的時(shí)間和成本都很低,需要的資源很很少,卻能帶來很多的經(jīng)濟(jì)效益。就市場(chǎng)來說,由于 Unity3D 可以把產(chǎn)品發(fā)布到十多個(gè)目前流行的平臺(tái),它的市場(chǎng)面是十分廣大的。第 8 頁 共 33 頁圖 3.2 電影冰雪奇緣3.43.4 技術(shù)實(shí)現(xiàn)及其優(yōu)勢(shì)技術(shù)實(shí)現(xiàn)及其優(yōu)勢(shì)游戲項(xiàng)目使用 Unity3D 游戲設(shè)計(jì)引擎,其優(yōu)勢(shì)在于該引擎支持多平臺(tái)多種開發(fā)環(huán)境。還有一個(gè)重點(diǎn)是它具備良好的交互性,因?yàn)殚_發(fā)一個(gè)游戲,最主要的目的是讓它好玩,那么開發(fā)者在制作的過程中就能體會(huì)到游戲
21、的可玩性是否高。3.53.5 游戲項(xiàng)目設(shè)計(jì)目標(biāo)游戲項(xiàng)目設(shè)計(jì)目標(biāo)設(shè)計(jì)該游戲的目標(biāo)是廣大的手機(jī)用戶,圖 3.3,亦可以發(fā)布至 Windows 等其他平臺(tái),具有廣大的目標(biāo)群。由于 Unity3D 具有先進(jìn)的跨平臺(tái)技術(shù),你的作品只需要一次性編寫代碼,就能輕輕松松發(fā)布到多鐘平臺(tái)去。第 9 頁 共 33 頁 圖 3.3 手機(jī)游戲4 4需要解決的問題需要解決的問題4.14.1 游戲項(xiàng)目中要解決的問題游戲項(xiàng)目中要解決的問題游戲項(xiàng)目要解決的問題很多,所以最關(guān)鍵的是先要管理好資源文件,分類明確有條理。在項(xiàng)目文件的預(yù)設(shè)目錄下,共創(chuàng)建了 8 個(gè)文件夾,分別存放動(dòng)畫文件、材質(zhì)文件、模型文件、Prefab 文件、場(chǎng)景文件
22、、代碼文件、音效文件和紋理文件。游戲項(xiàng)目視圖 4.1:圖 4.1 游戲項(xiàng)目視圖4.24.2 碰撞檢測(cè)問題碰撞檢測(cè)問題Unity3D 中實(shí)現(xiàn)碰撞檢測(cè)的方式有兩種:碰撞器和觸發(fā)器。碰撞器有很多的種類,如盒子碰撞器、球形碰撞器、膠囊碰撞器等,要使用這些碰撞器都必第 10 頁 共 33 頁須把該碰撞器組件添加到一個(gè)游戲?qū)ο笊厦妗H绻跈z視面板中勾選了IsTrigger,那么就成了觸發(fā)器。下面介紹 MonoBehaviour 類里面兩個(gè)函數(shù):1、MonoBehaviour.OnTriggerEnter(Collider collider)進(jìn)入觸發(fā)器。2、MonoBehaviour.OnCollision
23、Enter(Collision collision)進(jìn)入碰撞器。本游戲項(xiàng)目所涉及到的碰撞檢測(cè)都是進(jìn)入時(shí)的檢測(cè),即剛發(fā)生碰撞,沒有退出和逗留時(shí)的碰撞檢測(cè),所以另外四個(gè)接口函數(shù)就不在贅述,具體可以去官網(wǎng)查詢。添加碰撞檢測(cè)組件碰撞檢測(cè)器之后,在監(jiān)視器窗口顯示如下圖 4.2:圖 4.2 碰撞檢測(cè)器組件添加方法:Component-Physics-Collider;Component-Physics-Rigidbody;Is Trigger 屬性在勾選狀態(tài)下,那么該對(duì)象就是觸發(fā)器。下面其它參數(shù)則是設(shè)置碰撞體的大小、半徑。添加碰撞檢測(cè)組件剛體之后,在監(jiān)視器窗口顯示如下圖 4.3:圖 4.3 剛體組件Mas
24、s 是質(zhì)量,Drag 是阻力,Angular Drag 是角阻力。Use Gravity 是否使用重力,如果勾選物體將相對(duì)向下做自由落體運(yùn)動(dòng)。Is Kinematic 是否相對(duì)地面靜止,如果勾選物體將相對(duì)地面靜止。Constraints 屬性塊是設(shè)置物體的位置和旋第 11 頁 共 33 頁轉(zhuǎn)是否靜止,例如勾選了 Freeze Position Z 那么物體在 Z 軸方向不能移動(dòng),用腳本也不能讓它移動(dòng);這是很必要的,比如你做的是一個(gè) 2D 游戲,自然不希望它在 Z 軸發(fā)生移動(dòng)而影響碰撞檢測(cè)。4.34.3 粒子系統(tǒng)粒子系統(tǒng)Unity3D 自帶的粒子系統(tǒng)完全足以滿足開發(fā)者各種這方面的需求,比如在制作
25、煙霧、云雨、爆炸、火焰、天氣等。在創(chuàng)建好游戲?qū)ο蟛⑻砑恿W酉到y(tǒng)組件之后,正如你所見的,會(huì)出現(xiàn)很多屬性,如圖 4.4:圖 4.4 粒子系統(tǒng)圖 4 中所示的參數(shù)設(shè)置在運(yùn)行后出現(xiàn)的效果是一個(gè)下雪的效果。具體各個(gè)參數(shù)的意思,在這就不贅述了,舉幾個(gè)常用的參數(shù)。Looping 是否循環(huán),比如第 12 頁 共 33 頁此下雪的粒子效果,當(dāng)然要他循環(huán),再如爆炸之類的就不需要循環(huán)。Start Speed初始速度,可以設(shè)置一個(gè)參數(shù),也可以設(shè)置兩個(gè),即在這兩個(gè)參數(shù)之間隨機(jī)產(chǎn)生一個(gè)參數(shù),這個(gè)比較常用,Start Scale 用法與 Start Speed 類似。4.44.4 函數(shù)函數(shù)不管用什么編程語言,創(chuàng)建的腳本都必
26、須繼承 MonoBehaviour 類,他包括了許許多多的函數(shù),諸如上述的碰撞檢測(cè)函數(shù)。如果在檢視器里面修改了腳本文件的名稱,一定要記得在編譯器里面修改類名,不然就會(huì)出現(xiàn)異常的錯(cuò)誤。這里介紹幾個(gè)常用的函數(shù)。1、MonoBehaviour.OnGUI()接口有許多的屬性,如 GUI.Label 用于繪制列表,它有 6 個(gè)接口:(1)static function Label(position:Rect, text:String):void;(2)static function Label(position:Rect, image:Texture):void;(3)static function
27、Label(position:Rect, content:GUIContent):void;(4)static function Label(position:Rect, text:String, style:GUIStyle):void;(5)static function Label(position:Rect, image:Texture, style:GUIStyle):void;(6)static function Label(position:Rect, content:GUIContent, style:GUIStyle): void;像游戲分?jǐn)?shù)統(tǒng)計(jì)等,又如 GUI.TextAr
28、ea 用于繪制文本區(qū)域,它有 4 個(gè)借口,這里不再贅述。最常用的是 GUI.Button,設(shè)置各種按鈕。所有的 GUI 屬性都可以在檢視器里面創(chuàng)建一個(gè) GUISkin,來設(shè)置個(gè)性化的按鈕、圖片背景等,它有6 個(gè)借口:(1) static function Button(position:Rect, text:String):bool;(2) static function Button(position:Rect, image:Texture):bool;(3) static function Button(position:Rect, content:GUIContent):bool;(4)
29、 static function Button(position:Rect, text:String, style:GUIStyle):bool;(5) static function Button(position:Rect, image:Texture, style:GUIStyle):bool;(6) static function Button(position:Rect, content:GUIContent, style:GUIStyle):bool;這里將舉例如何使用個(gè)性化的按鈕,代碼如下:public GUISkin mySkin;void OnGUI()GUI.skin =
30、mySkin;第 13 頁 共 33 頁if(GUI.Button(new Rect(300, 200, 200, 100), “”, GUI.skin.GetStyle(“beginButton”)Application.LoadLevel(“Level”其中 mySkin 用來接收在檢視器窗口創(chuàng)建的 GUISkin 游戲?qū)ο?,在游戲?qū)ο罄锩婺憧梢灾付▊€(gè)性化的按鈕圖片,可以是兩張,一張是正常情況下的大小,指定在 Custom Styles 的 Normal 和 On Normal 屬性上面,一張是鼠標(biāo)移動(dòng)上去的大小,指定在 Custom Styles 的 Hover 和 On Hover 屬
31、性上面,如下圖 4.4。這樣就會(huì)達(dá)到鼠標(biāo)移動(dòng)上去按鈕變大的效果。圖 4.5 個(gè)性化按鈕2、MonoBehaviour.Start 和 MonoBehaviour.Update 函數(shù)。MonoBehaviour.Start 函數(shù)就是對(duì)游戲的一些預(yù)設(shè),并且在游戲執(zhí)行的整個(gè)周期中,此函數(shù)只調(diào)用一次。比如隱藏光標(biāo):void Start ()Screen.showCursor = false;/隱藏光標(biāo)/ Screen.showCursor = true;顯示光標(biāo)通過這樣的設(shè)置,我們就可以編寫響應(yīng)的代碼來實(shí)現(xiàn)個(gè)性化的光標(biāo)了。第 14 頁 共 33 頁MonoBehaviour.Update 函數(shù)功能就是
32、在執(zhí)行完 MonoBehaviour.Start 函數(shù)之后,游戲的每一幀都會(huì)執(zhí)行該函數(shù),來繪制每幀的畫面,這是非常重要的,否則游戲?qū)o法運(yùn)行。精靈動(dòng)畫的函數(shù)就必須放在這里面。5 5游戲總體設(shè)計(jì)游戲總體設(shè)計(jì)5.15.1 游戲設(shè)計(jì)準(zhǔn)備階段游戲設(shè)計(jì)準(zhǔn)備階段在游戲項(xiàng)目準(zhǔn)備階段,最主要的事情就是準(zhǔn)備游戲素材,在選材、美工等方面都有嚴(yán)格的要求。首先是制作按鈕,如菜單按鈕、退出按鈕、選擇按鈕等等;其次是場(chǎng)景背景圖片,力求能表達(dá)游戲主題、美觀;還有精靈動(dòng)畫序列圖的制作,即游戲玩家和敵人;還有游戲失敗窗口的制作、飛鏢、雪花等等。5.25.2 游戲設(shè)計(jì)制作階段游戲設(shè)計(jì)制作階段在游戲項(xiàng)目的制作階段,首先創(chuàng)建好六個(gè)場(chǎng)
33、景并取好名字。在開始界面,點(diǎn)擊開始游戲或者游戲操作介紹按鈕就會(huì)分別進(jìn)入到關(guān)卡一或者游戲介紹場(chǎng)景。關(guān)卡一獲得的分?jǐn)?shù)達(dá)到 100 分,將自動(dòng)跳轉(zhuǎn)到關(guān)卡選擇界面,然后才能進(jìn)入關(guān)卡二,繼續(xù)游戲,達(dá)到 200 分后,跳到勝利場(chǎng)景,游戲結(jié)束。每個(gè)場(chǎng)景都有相應(yīng)的腳本文件,許許多多的游戲?qū)ο蟆C總€(gè)游戲?qū)ο蟮慕M件都不盡相同,各有不同的功能,在下面將會(huì)有說明。5.35.3 游戲設(shè)計(jì)完成階段游戲設(shè)計(jì)完成階段目前游戲項(xiàng)目已經(jīng)完成,能夠順利運(yùn)行,并有音效、天氣效果等。開始界面如下圖 5. 1:第 15 頁 共 33 頁圖 5.1 開始界面點(diǎn)擊開始游戲?qū)⑦M(jìn)入游戲,如圖 5.2 所示:圖 5.2 游戲界面點(diǎn)擊游戲介紹將進(jìn)入
34、游戲介紹界面,如圖 5. 3 所示:第 16 頁 共 33 頁圖 5.3 介紹界面5.45.4 游戲玩法說明游戲玩法說明游戲所設(shè)計(jì)的玩法十分簡(jiǎn)單,空格鍵跳躍,其實(shí)跳躍的時(shí)候播放的是一個(gè)動(dòng)畫;按 Q 鍵發(fā)射飛鏢,飛鏢是一個(gè) Prefab 對(duì)象,每按一次 Q 都將實(shí)例化一個(gè)該 Prefab 對(duì)象,并在幾秒后銷毀。如果玩家不小心碰到雪球或者飛鳥,都將導(dǎo)致游戲失敗,雪球不能擊毀只能跳過,飛鳥能通過飛鏢擊毀并獲得 5 分。在關(guān)卡二,如果玩家跳躍的時(shí)候能夠獲得雪花會(huì)加 10 分,不過這會(huì)導(dǎo)致躲避雪球的難度增加。另外隨著時(shí)間的增加,分?jǐn)?shù)也會(huì)每秒長 1 分。游戲玩家的生命數(shù)只有一條。6 6游戲簡(jiǎn)介游戲簡(jiǎn)介6.
35、16.1 游戲背景游戲背景游戲項(xiàng)目開發(fā)的背景故事源自一部正在熱映的美國動(dòng)畫片F(xiàn)rozen ,這是一個(gè)充滿冰雪和浪漫的童話世界。故事講述的是一個(gè)咒語讓美麗的王國被冰天雪地永久覆蓋,而這個(gè)咒語正發(fā)生在冰雪皇后艾莎身上,國王被冰封之后,艾莎也失蹤了。樂觀勇敢的公主安娜在樂于助人的山民克里斯托夫的幫助下,帶著他的坐騎馴鹿準(zhǔn)備出發(fā)去尋找安娜失蹤的姐姐,來重新拯救王國,破除這個(gè)讓國家冰封的咒語。一路上的艱難坎坷、奇妙歷險(xiǎn),讓人回味無窮、催人淚下。第 17 頁 共 33 頁因此,具有開發(fā)此游戲的必要性和緊迫性,隨著人們對(duì)電影的熱愛和追捧,也會(huì)對(duì)該游戲產(chǎn)生極大的興趣。6.26.2 敵人敵人在安娜和山民克里斯托
36、夫的歷險(xiǎn)中,遇到過狼、雪崩以及惡劣的天氣。游戲敵人有兩個(gè),一個(gè)是地上滾動(dòng)的雪球,只能跳躍躲避,另外一個(gè)是隨機(jī)速度和高度飛過來的鳥,擊毀鳥會(huì)加 5 分。6.36.3 玩家玩家游戲玩家 Player 對(duì)象是一個(gè)跑動(dòng)的人物,不停的跳躍躲避雪球,并發(fā)射飛鏢來躲避飛鳥的攻擊。他的生命目前只有一次,以后可能會(huì)改動(dòng)。6.46.4 分?jǐn)?shù)統(tǒng)計(jì)分?jǐn)?shù)統(tǒng)計(jì)這里專門設(shè)計(jì)了一個(gè)腳本文件來統(tǒng)計(jì)分?jǐn)?shù),分?jǐn)?shù)分為當(dāng)前分?jǐn)?shù)和最高分?jǐn)?shù)。當(dāng)前分?jǐn)?shù)會(huì)隨著游戲的變化不斷更新,每秒鐘加 1 分,擊中飛鳥加 5 分,獲取雪花得并獲得 10 分,然后在進(jìn)入下個(gè)關(guān)卡當(dāng)前分?jǐn)?shù)清零。最高分?jǐn)?shù)是繼承的MonoBehaviour.PlayerPrefs
37、屬性,它具有本地保存數(shù)據(jù)的功能,能夠保存游戲過程中獲得的最高分?jǐn)?shù)。7 7游戲?qū)崿F(xiàn)游戲?qū)崿F(xiàn)7.17.1 變量變量任何游戲的變量都非常的多,這里不再贅述,僅列舉幾個(gè)重要的全局變量。1、static int 型變量 m_score 存放游戲當(dāng)前分?jǐn)?shù);2、static int 型變量 HighScore 存放游戲最高分?jǐn)?shù);3、static bool 型變量 isHitted 判斷玩家是否碰撞到飛鳥、雪球或者雪花,默認(rèn)值是 false;4、GUISkin 型變量 mySkin 保存皮膚,用于制作個(gè)性化按鈕、列表等;7.27.2 函數(shù)函數(shù)任何游戲的函數(shù)都非常的多,這里不再贅述,僅列舉一些重要的函數(shù)。1、b
38、ool myAniSprite(int colsize, int rowsize, int colframestart, int rowframestart, int totalframes, int framepersecond, int totaltime, bool moveDirection) myTime += Time.deltaTime; if (totaltime != 0 & myTime totaltime)第 18 頁 共 33 頁 isPlay = false; myTime = 0; return isPlay; int index = (int)(myTim
39、e * (framepersecond - 1); index = index % totalframes; int v = index / colsize; if (moveDirection) size= new Vector2(float)(1.0 / colsize), (float)(1.0 / rowsize); u = index % colsize; else size=new Vector2(float)(-1.0 / colsize),(float)(1.0 / rowsize); u = -index % colsize; offset=new Vector2(float
40、)(u + colframestart) * size.x), (float)(1.0 - size.y) - (v + rowframestart) * size.y); renderer.material.mainTextureOffset = offset; renderer.material.mainTextureScale = size; return true; 此函數(shù)實(shí)現(xiàn)的功能就是精英動(dòng)畫的播放,它的原理很簡(jiǎn)單,比如一張 2 行3 列的圖片,如圖 7.1 所示,劃分成 6 個(gè)塊,每幀渲染一塊,由于視覺暫留,就第 19 頁 共 33 頁會(huì)成為動(dòng)畫。上述代碼最關(guān)鍵的就是計(jì)算精靈序列圖
41、的 offset 和 size 值,并將他們分別賦值如下:renderer.material.mainTextureOffset = offset;renderer.material.mainTextureScale = size;然后系統(tǒng)就會(huì)在每幀執(zhí)行一次該函數(shù),以達(dá)到角色運(yùn)動(dòng)的效果。圖 7.1 精靈動(dòng)畫2、private void DrawWindow (int windowID)GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), loseWindow);GUI.Label(new Rect(350, 300, 240,
42、 40),Score: + Score.m_score.ToString(),GUI.skin.GetStyle(label);GUI.Label(new Rect(350, 350, 240, 40),HighScore: + PlayerPrefs.GetInt(HighScore).ToString(),GUI.skin.GetStyle(label);if(GUI.Button(new Rect(300, 400, 200, 200), , GUI.skin.GetStyle(backButton)Application.LoadLevel(MainScene);第 20 頁 共 33
43、 頁此函數(shù)實(shí)現(xiàn)的功能是繪制窗口,如在玩游戲的時(shí)候,當(dāng)你要重新開始時(shí),系統(tǒng)就會(huì)彈一個(gè)窗口,詢問你是否重新開始。3、IEnumerator PlaySound (AudioClip soundName)if(!audio.isPlaying)audio.clip = soundName;audio.Play();yield return new WaitForSeconds(audio.clip.length);此函數(shù)實(shí)現(xiàn)的功能是音效的控制,在什么時(shí)候停止、暫?;蛘卟シ诺?。7.37.3 粒子系統(tǒng)的實(shí)現(xiàn)粒子系統(tǒng)的實(shí)現(xiàn)游戲項(xiàng)目下雪的天氣效果就是通過 Unity3D 粒子系統(tǒng)來實(shí)現(xiàn)的。首先,創(chuàng)建一個(gè)空白
44、的 GameObject,然后把粒子系統(tǒng)游戲組件添加到里面,步驟如下:Component-Effects-Particle System;設(shè)置參數(shù)如下圖 7.2、7.3、7.4 所示:圖 7.2 雪粒子參數(shù)第 21 頁 共 33 頁圖 7.3 雪粒子參數(shù)圖 7.4 雪粒子參數(shù)其他選項(xiàng)不需要勾選就能呈現(xiàn)出下雪的效果了。7.47.4 碰撞檢測(cè)的實(shí)現(xiàn)碰撞檢測(cè)的實(shí)現(xiàn)這里僅列舉一個(gè)碰撞檢測(cè)函數(shù),首先得在相應(yīng)的兩個(gè)游戲?qū)ο笊厦嫣砑优鲎矙z測(cè)器和剛體組件,具體步驟如下:Component-Physics-Collider;Component-Physics-Rigidbody;注意不要勾選重力,代碼實(shí)現(xiàn)如下:
45、void OnTriggerEnter (Collider collider)if(collider.gameO = Player)isHit = true;Score.isHitted = true;第 22 頁 共 33 頁if(collider.gameO = bullet(Clone)isHitBullet = true;SetPositionAndSpeed();Score.m_score += 5;該碰撞檢測(cè)函數(shù)使用的是觸發(fā)器,檢測(cè)的是玩家對(duì)象是否碰撞到飛鳥以及飛鏢是否碰撞到飛鏢,進(jìn)而實(shí)現(xiàn)不同的游戲功能。7.57.5 音效的實(shí)現(xiàn)音效的實(shí)現(xiàn)音效
46、主要有背景音樂、人物音效、飛鏢音效等。實(shí)現(xiàn)游戲音效,只需要在主像機(jī)添加一個(gè) Audio Listener 游戲組件,具體步驟如下: Component-Audio-Audio Listener;然后在相應(yīng)的游戲?qū)ο笊厦嫣砑?Audio Source 游戲組件,具體步驟如下:Component-Audio-Audio Source;如圖 7.5 所示:圖 7.5 音效組件最后再用代碼進(jìn)行相應(yīng)的控制就行了。7.67.6 游戲通關(guān)游戲通關(guān)在玩家通過關(guān)卡一得到 100 分之后,將選擇進(jìn)入關(guān)卡二,如果再得到 200第 23 頁 共 33 頁分就將通關(guān),進(jìn)入獲勝場(chǎng)景。此刻玩家可以看見自己分?jǐn)?shù)和最高分,選擇
47、是否重新開始游戲。選關(guān)場(chǎng)景如圖 7.6 所示:圖 7.6 下一關(guān)界面7.77.7 游戲失敗游戲失敗如果玩家在游戲過程中沒有躲避雪球或者飛鳥的攻擊,那么游戲就會(huì)失敗。游戲失敗之后,就會(huì)調(diào)用繪制窗口的函數(shù),繪制一個(gè)選擇窗口。然后,玩家可以選擇繼續(xù)游戲或者退出游戲。繼續(xù)游戲?qū)⒒氐接螒蜷_始界面,并進(jìn)入一關(guān),不能直接進(jìn)行第二關(guān),即使之前通過了第一關(guān)也不行。8 8項(xiàng)目總結(jié)項(xiàng)目總結(jié)8.18.1 總結(jié)的目的總結(jié)的目的項(xiàng)目在開發(fā)的過程中,遇到很多的問題,是需要總結(jié)并記錄的,以便于下次在遇到同樣的問題時(shí),能夠快速高效的解決該問題,以節(jié)省游戲項(xiàng)目的開發(fā)周期,降低開發(fā)的成本。并且,對(duì)一個(gè)已完成游戲項(xiàng)目的總結(jié),在他人學(xué)
48、習(xí)該項(xiàng)目時(shí),可以提供很好的幫助。8.28.2 關(guān)鍵性問題總結(jié)關(guān)鍵性問題總結(jié)第一個(gè)關(guān)鍵性問題是精靈動(dòng)畫在貼圖的時(shí)候遇到的麻煩。剛開始用是Unity3D 的平面組件來進(jìn)行貼圖,但是貼圖用上去之后,運(yùn)行時(shí),精靈在運(yùn)動(dòng)第 24 頁 共 33 頁的時(shí)候是倒立的,在檢視器窗口中進(jìn)行手動(dòng)旋轉(zhuǎn) 180 度之后,貌似問題解決了,但是在腳本控制精靈運(yùn)動(dòng)的時(shí)候就會(huì)出現(xiàn)意想不到的運(yùn)動(dòng),比如代碼明明寫的是讓精靈水平運(yùn)動(dòng),但是精靈卻是斜著走的。然后,我又試著用盒子組件來進(jìn)行貼圖,問題就更加千奇百怪了。最后,終于找到了解決辦法:用 Maya 創(chuàng)建一個(gè)平面,讓這個(gè)平面的繞 X 軸旋轉(zhuǎn) 90 度,然后繞 Y 軸旋轉(zhuǎn) 180 度,使得自身
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 火鍋店設(shè)計(jì)方案
- 溺水急救操作手冊(cè)
- 浙江嘉興市新韋進(jìn)出口有限公司招聘筆試題庫2025
- 2025年?duì)I養(yǎng)與健康科學(xué)基礎(chǔ)知識(shí)學(xué)習(xí)考試試卷及答案
- 2025年職業(yè)培訓(xùn)與認(rèn)證管理的考試試題及答案
- 2025年文物與博物館管理專業(yè)考試試卷及答案
- 2025年文案創(chuàng)作專業(yè)資格考試試卷及答案
- 2025年人工智能與道德倫理相關(guān)知識(shí)考試卷及答案
- 2025年市場(chǎng)營銷與品牌管理考研試卷及答案
- 2025年企業(yè)法律事務(wù)與合規(guī)管理考試卷及答案
- 地方低空經(jīng)濟(jì)平臺(tái)建設(shè)指南白皮書
- 心血管-腎臟-代謝綜合征患者的綜合管理中國專家共識(shí)2025解讀
- 婚慶合作入股協(xié)議書
- 學(xué)院“十五五”大學(xué)文化建設(shè)規(guī)劃
- 2025年陜西省西安市西咸新區(qū)中考二模語文試題(原卷版+解析版)
- 安全生產(chǎn)管理和培訓(xùn)制度
- 2025山東濟(jì)南先行投資集團(tuán)有限責(zé)任公司及權(quán)屬公司社會(huì)招聘169人筆試參考題庫附帶答案詳解
- 2024年高考化學(xué)試卷(山東)(解析卷)
- 2025新款上海勞動(dòng)合同樣本
- 2025中國工商銀行總行本部秋季校園招聘100人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 《濾泡狀甲狀腺癌》教學(xué)課件
評(píng)論
0/150
提交評(píng)論