Unity3D游戲設計與實現_第1頁
Unity3D游戲設計與實現_第2頁
Unity3D游戲設計與實現_第3頁
Unity3D游戲設計與實現_第4頁
Unity3D游戲設計與實現_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、分類號:分類號:TP31TP31 U U D D C C:D10621-408-(2014)1248-0D10621-408-(2014)1248-0密密 級:公級:公 開開 編編 號:號:成成 都都 信信 息息 工工 程程 學學 院院學學 位位 論論 文文Frozen 游戲設計與實現游戲設計與實現論文作者姓名:論文作者姓名:申請學位專業(yè):申請學位專業(yè):數字媒體技術數字媒體技術申請學位類別:申請學位類別:指指導導教教師師姓姓名名(職職稱稱):論文提交日期:論文提交日期:Frozen 游戲設計與實現游戲設計與實現摘摘 要要為了學習 Unity3D 游戲引擎,為了進一步了解并熟悉該款引擎,本文描述

2、了如何制作了一個二維的跑酷類游戲項目,這個游戲的背景來源于一部叫做冰雪奇緣的電影。通過對該項目的制作和學習,來了解用 Unity3D 開發(fā)游戲的利與弊,以及這款游戲引擎未來的優(yōu)勢。本文所述的游戲項目開發(fā)所用的開發(fā)工具是 Unity3D 自帶的開發(fā)工具,叫做 MonoBehaviour,選擇的開發(fā)語言是 C#。該游戲項目是一個小型的 2D 游戲制作,開發(fā)周期短,實現所涉及的技術也是學習 Unity3D 必備的一些知識,但是也是一些重要的基礎知識,很多其他的 Unity3D 游戲制作,也是通過把 Unity3D 的各個功能模塊一點點組織拼接起來而成的。關鍵詞關鍵詞: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目目 錄錄論文總頁數:281引言.11.1UNITY3D 簡介.11.2UNITY3D 語言開發(fā)環(huán)境及開發(fā)工具.21.3UNITY3D 應用.21.4UNITY3D 未來優(yōu)勢.42使用 UNITY3D 開發(fā)游戲的優(yōu)勢 .42.1跨平臺的先進技術.42.2輕松入門.52.3市場影響力廣.53研究現狀及設計目標.63.1游戲

6、簡介及動畫制作.63.2游戲類型.73.3游戲前景.73.4技術實現及其優(yōu)勢.83.5游戲項目設計目標.84需要解決的問題.94.1游戲項目中要解決的問題.94.2碰撞檢測問題.94.3粒子系統(tǒng).104.4函數.115游戲總體設計.135.1游戲設計準備階段.135.2游戲設計制作階段.145.3游戲設計完成階段.145.4游戲玩法說明.166游戲簡介.166.1游戲背景.166.2敵人.166.3玩家.166.4分數統(tǒng)計.167游戲實現.167.1變量.16第 1 頁 共 33 頁7.2函數.177.3粒子系統(tǒng)的實現.197.4碰撞檢測的實現.217.5音效的實現.217.6游戲通關.227

7、.7游戲失敗.238項目總結.238.1總結的目的.238.2關鍵性問題總結.238.3游戲開發(fā)周期.23結 束 語.25參考文獻.26致 謝.27聲 明.28第 1 頁 共 33 頁1 1 引言引言1.11.1 Unity3D 簡介簡介Unity3D 是由 Unity Technologies 開發(fā)的一個游戲引擎,操作界面如下圖1.1 所示,它集快速性交互性于一體,帶有強大的渲染引擎,對DirectX、OpenGL 擁有高度優(yōu)化的圖形渲染管道,能夠允許開發(fā)者能夠高效直觀的開發(fā)出 2D 或者 3D 游戲,是一個全面整合的游戲引擎。并且,Unity3D 游戲引擎能夠十分方便的將開發(fā)出的游戲發(fā)布到

8、各個平臺,如iPhone、Android 等 平臺。此外,還可以用 Unity Web Player 插件將作品發(fā)布成網頁游戲,玩家只需下載這個很小的插件就能輕輕松松的玩 Unity 網頁版游戲。Unity3D 游戲引擎通過使用植被系統(tǒng) Unitree,提供了大量的 Shader 供開發(fā)者使用,這些 Shader 完全足以滿足開發(fā)者的需求,使得即使在低端硬件設備下也 能 夠運行廣闊茂盛的植被景觀。打開地形編輯器,從左到右依次是:地形拉 升降低、準確的繪制地形高度、地形圓滑、地形文理繪制、地形植被繪制樹木、地形植被繪制-草及小物體、地形參數設置。另外,它支持所有主要 的文件格式,并能和其他應用程

9、序協同工作。它還用了 PhysX 的物理引擎,使得開發(fā)者能夠輕松的實現各種物理效果。Unity 游戲引擎提供了柔和陰影與烘焙的高度完善的光影渲染系統(tǒng),它的著色器整合了易用性、靈活性和高性能的特點。目前,Unity3D 游戲引擎最新版本是 Unity4.0,它能將你的作品發(fā)布到MAC、Windows、安卓等十個以上當今盛行的平臺。此外,購買功能更加強大的正版 Unity3D 游戲引擎,經授權之后可以安裝在 2 個不同的系統(tǒng),如一個Windows,一個 Mac,官方網址是 。Unity3D 游戲引擎研討會正在茁壯發(fā)展。第一次 Unity3D 游戲引擎研討 會是在 2010 年 5 月,舉辦地點是在

10、韓國,引發(fā)了許許多多的商家投資并簽訂了引擎預定協議。亞洲作為 Unity3D 游戲引擎公司的一個重要戰(zhàn)略地,2013 年在上海舉辦了研討會。不久 Unity3D 游戲引擎公司又宣布取消支持對 Flash 的支持。第 2 頁 共 33 頁圖 1.1 Unity3D 操作界面1.21.2 Unity3D 語言開發(fā)環(huán)境及開發(fā)工具語言開發(fā)環(huán)境及開發(fā)工具Unity3D 是一款綜合型的游戲開發(fā)引擎。其中 MonoBehaviour 是該公司 自己開發(fā)的一個編譯工具,自然跟 Unity3D 是十分兼容的,比如調試等就十分方便。當然,也可以選擇自己的編譯工具,如 Visual Studio 2010,只需要在

11、菜單里面設置一下默認編譯工具就行,這樣在你創(chuàng)建并打開代碼文檔時就默認打開了你所設置的編譯工具。目前,Unity3D 只允許 3 種編程語言:C#、javascript、Mobo。其中 C#運用較為廣泛,因為它的兼容性比較好,便于更好的發(fā)布到各個平臺。1.31.3 Unity3D 應用應用目前,用 Unity3D 游戲設計引擎開發(fā)手機游戲的比較多,如勇者之心、 神廟逃亡系列、憤怒的小鳥等;也有用來開發(fā)單機游戲的,如軒轅劍六、搗蛋豬等;網頁游戲諸如新仙劍 Online、QQ 樂團等,部分游戲截圖如圖1.2、1.3、1.4 所示。在虛擬現實方面,只需要將在 Maya 或者 Max 等其他三維軟件里面

12、做出的模型導出為 fbx 格式,然后導入 Unity3D,設置攝像機代碼、UI、Build。第 3 頁 共 33 頁圖 1.2 神廟逃亡圖 1.3 憤怒的小鳥第 4 頁 共 33 頁圖 1.4 軒轅劍1.41.4 Unity3D 未來優(yōu)勢未來優(yōu)勢很多游戲引擎起初都是很不起眼的,Unity 在 2004 年誕生于丹麥,后來 把總部設在了美國舊金山。到 2014 年,其注冊人數已達 80 萬,僅是蘋果應用商店里面用 Unity 開發(fā)的游戲已達一千五百多個。在未來,隨著Web、IOS、Android 等平臺越來越廣泛的應用,因它強悍的跨平臺能力和易學的功能界,Unity3D 游戲設計引擎必將變大炙手

13、可熱。Unity3D 是開發(fā)者使用最廣的游戲引擎,目前有 53.1%的開發(fā)所開發(fā)的游戲是通過 Unity3D 游戲引擎來開發(fā)制作的,其中在一項調查中顯示,開發(fā)選擇這款引擎一個最重要的因素是它的開發(fā)周期短。之所以這樣,是因為他們都覺得Unity3D 游戲引擎簡單易學,功能強大;有一定程序基礎的人只需要一兩個月就能入門。2使用使用 Unity3D 開發(fā)游戲的優(yōu)勢開發(fā)游戲的優(yōu)勢2.12.1 跨平臺的先進技術跨平臺的先進技術Unity3D 開發(fā)的游戲和應用主要使用的是 C#語言,當然前面介紹的其他的2 種語言也可以,其編譯的過程根據目標平臺的變化而不盡相同。在 PC、Mac第 5 頁 共 33 頁和

14、Android 平臺上,你所寫的代碼會被系統(tǒng)編譯成字節(jié)碼,并且可以在 Runtime用 JIT(Just In Time 的縮寫,中文意思是即時編譯器)編譯器執(zhí)行。如果是在其他的平臺上,那么游戲在執(zhí)行是代碼是需要進行一個預編譯的,轉變成目標機器的本地代碼而執(zhí)行。這就是為什么 Unity3D 開發(fā)的游戲能夠支持多平臺,能夠發(fā)布到近十幾種十分流行的平臺上去,如下面圖 2.1 所示:圖 2.1 Unity3D 多平臺性2.22.2 輕松入門輕松入門目前為止,注冊 Unity3D 用戶已達八十多萬,每天在線人數達二十多萬,你如果在學習使用 Unity3D 的時候可以隨時上官網論壇上去請求幫助。更重要的

15、一點是你所遇到的問題,其實在之前很多人都遇到過,這樣你的問題就很快能得到解決。另外,Unity3D 的交互性特點可以讓你即使程序基礎不是很好也能設計出你想要的游戲。比如有一個 2D 游戲叫挺過 1 分鐘,游戲場景只有一個,就是一個封閉的長方形界面,一個人物左右移動躲避一個在理想狀態(tài)下在長方形里面彈來彈去的球,隨著時間的增加,球的數量也會增加。這里涉及到的基礎知識只有幾點,如碰撞檢測、物理引擎,游戲大小只有幾 KB,但是這個游戲卻很有趣,吸引力不少人,可以在無聊之際用來打發(fā)時間。2.32.3 市場影響力廣市場影響力廣現在不管是哪行哪業(yè),什么產品,都將就一個客戶需求量,也就是市場,那么 Unity

16、3D 的市場怎么樣呢?同諸多游戲引擎不同的是,Unity3D 不僅僅處在 3D 游戲市場,也能夠制作完美的 2D 游戲,Unity3D 支持很多平臺(Windows、IOS、Mac 等十余種) ,還支持許多游戲機(PS3、Wii 等) ,以及瀏覽器等等,市場范圍是如此之廣。第 6 頁 共 33 頁在一項調查中顯示,一個開發(fā)者在開發(fā)一個 3D 游戲的時候,有 72%的人首選的開發(fā)工具是 Unity3D。他們往往還選擇用 Unity3D 做一下視覺結構、軍事仿真等等。3 3研究現狀及設計目標研究現狀及設計目標3.13.1 游戲簡介及動畫制作游戲簡介及動畫制作游戲項目開發(fā)的游戲名稱為Frozen ,

17、使用的游戲引擎為 Unity3D,開發(fā)周期大約一個多月,代碼文件 16 個,開發(fā)語言為 C#。游戲共有 6 個場景,分別是開始場景、選關場景、關卡 1、關卡 2、勝利場景、游戲介紹場景,沒有失敗場景,失敗的時候是繪制了一個窗口,讓玩家選擇是重新游戲或者退出游戲。游戲也有用到 Unity3D 動畫制作的功能,如游戲人物的跳躍,開始界面等,這里將游戲動畫介紹一下,下面就不在敘述了。選中需要做動畫的一個游戲對象,然后選擇 Window-Animation,進入動畫編輯窗口,如下圖 3.1 所示:圖 3.1 動畫編輯窗口做動畫之前應該先存儲這個動畫原件,點擊紅色的圓形按鈕,并為動畫取好名稱,存儲在 A

18、nimation 目錄下。然后在需要改變的屬性上面右擊,添加關鍵幀,改變響應屬性,點擊運行按鈕,動畫變完成了。需要注意的是,我們在人物動畫做的是一個按空格鍵跳動的動畫,而不是讓他一直跳,那么就需要代碼控制了,如下:void Start ()transform.animation.Stop();void Update()if(Input.GetKeyDown(“space”)第 7 頁 共 33 頁transform.animation.Play();3.23.2 游戲類型游戲類型游戲項目所開發(fā)的游戲名稱為Frozen ,游戲操作十分簡單,空格鍵跳躍來躲避雪球或者奪取雪花,Q 鍵發(fā)射飛鏢擊殺敵人

19、。按游戲類型來分,本游戲屬于一種冒險類游戲(Adventure Game) ,也是一種跑酷類游戲,主要考察玩家的操作和對未知是好奇之心,引發(fā)他們的互動性。按游戲內容來分,本游戲屬于一種探索類游戲,通過不同的關卡,玩家可以通過不同的方式來獲得游戲分數,不停的進行探索。按游戲載體來分,本游戲屬于電子類游戲。按游戲平臺來分,本游戲可以發(fā)布到十多個平臺,具有廣大的平臺系統(tǒng)。按玩家人數來分,本游戲屬于單人冒險過關游戲,是一個單機游戲。3.33.3 游戲前景游戲前景如今手機游戲正在蓬勃發(fā)展,屬于一種朝陽行業(yè),而且本游戲的設計背景又源自于一部風靡全球的美國動畫片Frozen ,電影海報如圖 3.2 所示,當

20、用戶看見這個名字時會不經意的去下載它。就客戶量來說,隨著這部電影的喜愛著的增加,加上手機用戶量龐大,因此本游戲具有它的客戶量。就經濟效益來說,游戲開發(fā)的時間和成本都很低,需要的資源很很少,卻能帶來很多的經濟效益。就市場來說,由于 Unity3D 可以把產品發(fā)布到十多個目前流行的平臺,它的市場面是十分廣大的。第 8 頁 共 33 頁圖 3.2 電影冰雪奇緣3.43.4 技術實現及其優(yōu)勢技術實現及其優(yōu)勢游戲項目使用 Unity3D 游戲設計引擎,其優(yōu)勢在于該引擎支持多平臺多種開發(fā)環(huán)境。還有一個重點是它具備良好的交互性,因為開發(fā)一個游戲,最主要的目的是讓它好玩,那么開發(fā)者在制作的過程中就能體會到游戲

21、的可玩性是否高。3.53.5 游戲項目設計目標游戲項目設計目標設計該游戲的目標是廣大的手機用戶,圖 3.3,亦可以發(fā)布至 Windows 等其他平臺,具有廣大的目標群。由于 Unity3D 具有先進的跨平臺技術,你的作品只需要一次性編寫代碼,就能輕輕松松發(fā)布到多鐘平臺去。第 9 頁 共 33 頁 圖 3.3 手機游戲4 4需要解決的問題需要解決的問題4.14.1 游戲項目中要解決的問題游戲項目中要解決的問題游戲項目要解決的問題很多,所以最關鍵的是先要管理好資源文件,分類明確有條理。在項目文件的預設目錄下,共創(chuàng)建了 8 個文件夾,分別存放動畫文件、材質文件、模型文件、Prefab 文件、場景文件

22、、代碼文件、音效文件和紋理文件。游戲項目視圖 4.1:圖 4.1 游戲項目視圖4.24.2 碰撞檢測問題碰撞檢測問題Unity3D 中實現碰撞檢測的方式有兩種:碰撞器和觸發(fā)器。碰撞器有很多的種類,如盒子碰撞器、球形碰撞器、膠囊碰撞器等,要使用這些碰撞器都必第 10 頁 共 33 頁須把該碰撞器組件添加到一個游戲對象上面。如果在檢視面板中勾選了IsTrigger,那么就成了觸發(fā)器。下面介紹 MonoBehaviour 類里面兩個函數:1、MonoBehaviour.OnTriggerEnter(Collider collider)進入觸發(fā)器。2、MonoBehaviour.OnCollision

23、Enter(Collision collision)進入碰撞器。本游戲項目所涉及到的碰撞檢測都是進入時的檢測,即剛發(fā)生碰撞,沒有退出和逗留時的碰撞檢測,所以另外四個接口函數就不在贅述,具體可以去官網查詢。添加碰撞檢測組件碰撞檢測器之后,在監(jiān)視器窗口顯示如下圖 4.2:圖 4.2 碰撞檢測器組件添加方法:Component-Physics-Collider;Component-Physics-Rigidbody;Is Trigger 屬性在勾選狀態(tài)下,那么該對象就是觸發(fā)器。下面其它參數則是設置碰撞體的大小、半徑。添加碰撞檢測組件剛體之后,在監(jiān)視器窗口顯示如下圖 4.3:圖 4.3 剛體組件Mas

24、s 是質量,Drag 是阻力,Angular Drag 是角阻力。Use Gravity 是否使用重力,如果勾選物體將相對向下做自由落體運動。Is Kinematic 是否相對地面靜止,如果勾選物體將相對地面靜止。Constraints 屬性塊是設置物體的位置和旋第 11 頁 共 33 頁轉是否靜止,例如勾選了 Freeze Position Z 那么物體在 Z 軸方向不能移動,用腳本也不能讓它移動;這是很必要的,比如你做的是一個 2D 游戲,自然不希望它在 Z 軸發(fā)生移動而影響碰撞檢測。4.34.3 粒子系統(tǒng)粒子系統(tǒng)Unity3D 自帶的粒子系統(tǒng)完全足以滿足開發(fā)者各種這方面的需求,比如在制作

25、煙霧、云雨、爆炸、火焰、天氣等。在創(chuàng)建好游戲對象并添加粒子系統(tǒng)組件之后,正如你所見的,會出現很多屬性,如圖 4.4:圖 4.4 粒子系統(tǒng)圖 4 中所示的參數設置在運行后出現的效果是一個下雪的效果。具體各個參數的意思,在這就不贅述了,舉幾個常用的參數。Looping 是否循環(huán),比如第 12 頁 共 33 頁此下雪的粒子效果,當然要他循環(huán),再如爆炸之類的就不需要循環(huán)。Start Speed初始速度,可以設置一個參數,也可以設置兩個,即在這兩個參數之間隨機產生一個參數,這個比較常用,Start Scale 用法與 Start Speed 類似。4.44.4 函數函數不管用什么編程語言,創(chuàng)建的腳本都必

26、須繼承 MonoBehaviour 類,他包括了許許多多的函數,諸如上述的碰撞檢測函數。如果在檢視器里面修改了腳本文件的名稱,一定要記得在編譯器里面修改類名,不然就會出現異常的錯誤。這里介紹幾個常用的函數。1、MonoBehaviour.OnGUI()接口有許多的屬性,如 GUI.Label 用于繪制列表,它有 6 個接口:(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;像游戲分數統(tǒng)計等,又如 GUI.TextAr

28、ea 用于繪制文本區(qū)域,它有 4 個借口,這里不再贅述。最常用的是 GUI.Button,設置各種按鈕。所有的 GUI 屬性都可以在檢視器里面創(chuàng)建一個 GUISkin,來設置個性化的按鈕、圖片背景等,它有6 個借口:(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;這里將舉例如何使用個性化的按鈕,代碼如下: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 游戲對象,在游戲對象里面你可以指定個性化的按鈕圖片,可以是兩張,一張是正常情況下的大小,指定在 Custom Styles 的 Normal 和 On Normal 屬性上面,一張是鼠標移動上去的大小,指定在 Custom Styles 的 Hover 和 On Hover 屬

31、性上面,如下圖 4.4。這樣就會達到鼠標移動上去按鈕變大的效果。圖 4.5 個性化按鈕2、MonoBehaviour.Start 和 MonoBehaviour.Update 函數。MonoBehaviour.Start 函數就是對游戲的一些預設,并且在游戲執(zhí)行的整個周期中,此函數只調用一次。比如隱藏光標:void Start ()Screen.showCursor = false;/隱藏光標/ Screen.showCursor = true;顯示光標通過這樣的設置,我們就可以編寫響應的代碼來實現個性化的光標了。第 14 頁 共 33 頁MonoBehaviour.Update 函數功能就是

32、在執(zhí)行完 MonoBehaviour.Start 函數之后,游戲的每一幀都會執(zhí)行該函數,來繪制每幀的畫面,這是非常重要的,否則游戲將無法運行。精靈動畫的函數就必須放在這里面。5 5游戲總體設計游戲總體設計5.15.1 游戲設計準備階段游戲設計準備階段在游戲項目準備階段,最主要的事情就是準備游戲素材,在選材、美工等方面都有嚴格的要求。首先是制作按鈕,如菜單按鈕、退出按鈕、選擇按鈕等等;其次是場景背景圖片,力求能表達游戲主題、美觀;還有精靈動畫序列圖的制作,即游戲玩家和敵人;還有游戲失敗窗口的制作、飛鏢、雪花等等。5.25.2 游戲設計制作階段游戲設計制作階段在游戲項目的制作階段,首先創(chuàng)建好六個場

33、景并取好名字。在開始界面,點擊開始游戲或者游戲操作介紹按鈕就會分別進入到關卡一或者游戲介紹場景。關卡一獲得的分數達到 100 分,將自動跳轉到關卡選擇界面,然后才能進入關卡二,繼續(xù)游戲,達到 200 分后,跳到勝利場景,游戲結束。每個場景都有相應的腳本文件,許許多多的游戲對象。每個游戲對象的組件都不盡相同,各有不同的功能,在下面將會有說明。5.35.3 游戲設計完成階段游戲設計完成階段目前游戲項目已經完成,能夠順利運行,并有音效、天氣效果等。開始界面如下圖 5. 1:第 15 頁 共 33 頁圖 5.1 開始界面點擊開始游戲將進入游戲,如圖 5.2 所示:圖 5.2 游戲界面點擊游戲介紹將進入

34、游戲介紹界面,如圖 5. 3 所示:第 16 頁 共 33 頁圖 5.3 介紹界面5.45.4 游戲玩法說明游戲玩法說明游戲所設計的玩法十分簡單,空格鍵跳躍,其實跳躍的時候播放的是一個動畫;按 Q 鍵發(fā)射飛鏢,飛鏢是一個 Prefab 對象,每按一次 Q 都將實例化一個該 Prefab 對象,并在幾秒后銷毀。如果玩家不小心碰到雪球或者飛鳥,都將導致游戲失敗,雪球不能擊毀只能跳過,飛鳥能通過飛鏢擊毀并獲得 5 分。在關卡二,如果玩家跳躍的時候能夠獲得雪花會加 10 分,不過這會導致躲避雪球的難度增加。另外隨著時間的增加,分數也會每秒長 1 分。游戲玩家的生命數只有一條。6 6游戲簡介游戲簡介6.

35、16.1 游戲背景游戲背景游戲項目開發(fā)的背景故事源自一部正在熱映的美國動畫片Frozen ,這是一個充滿冰雪和浪漫的童話世界。故事講述的是一個咒語讓美麗的王國被冰天雪地永久覆蓋,而這個咒語正發(fā)生在冰雪皇后艾莎身上,國王被冰封之后,艾莎也失蹤了。樂觀勇敢的公主安娜在樂于助人的山民克里斯托夫的幫助下,帶著他的坐騎馴鹿準備出發(fā)去尋找安娜失蹤的姐姐,來重新拯救王國,破除這個讓國家冰封的咒語。一路上的艱難坎坷、奇妙歷險,讓人回味無窮、催人淚下。第 17 頁 共 33 頁因此,具有開發(fā)此游戲的必要性和緊迫性,隨著人們對電影的熱愛和追捧,也會對該游戲產生極大的興趣。6.26.2 敵人敵人在安娜和山民克里斯托

36、夫的歷險中,遇到過狼、雪崩以及惡劣的天氣。游戲敵人有兩個,一個是地上滾動的雪球,只能跳躍躲避,另外一個是隨機速度和高度飛過來的鳥,擊毀鳥會加 5 分。6.36.3 玩家玩家游戲玩家 Player 對象是一個跑動的人物,不停的跳躍躲避雪球,并發(fā)射飛鏢來躲避飛鳥的攻擊。他的生命目前只有一次,以后可能會改動。6.46.4 分數統(tǒng)計分數統(tǒng)計這里專門設計了一個腳本文件來統(tǒng)計分數,分數分為當前分數和最高分數。當前分數會隨著游戲的變化不斷更新,每秒鐘加 1 分,擊中飛鳥加 5 分,獲取雪花得并獲得 10 分,然后在進入下個關卡當前分數清零。最高分數是繼承的MonoBehaviour.PlayerPrefs

37、屬性,它具有本地保存數據的功能,能夠保存游戲過程中獲得的最高分數。7 7游戲實現游戲實現7.17.1 變量變量任何游戲的變量都非常的多,這里不再贅述,僅列舉幾個重要的全局變量。1、static int 型變量 m_score 存放游戲當前分數;2、static int 型變量 HighScore 存放游戲最高分數;3、static bool 型變量 isHitted 判斷玩家是否碰撞到飛鳥、雪球或者雪花,默認值是 false;4、GUISkin 型變量 mySkin 保存皮膚,用于制作個性化按鈕、列表等;7.27.2 函數函數任何游戲的函數都非常的多,這里不再贅述,僅列舉一些重要的函數。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; 此函數實現的功能就是精英動畫的播放,它的原理很簡單,比如一張 2 行3 列的圖片,如圖 7.1 所示,劃分成 6 個塊,每幀渲染一塊,由于視覺暫留,就第 19 頁 共 33 頁會成為動畫。上述代碼最關鍵的就是計算精靈序列圖

41、的 offset 和 size 值,并將他們分別賦值如下:renderer.material.mainTextureOffset = offset;renderer.material.mainTextureScale = size;然后系統(tǒng)就會在每幀執(zhí)行一次該函數,以達到角色運動的效果。圖 7.1 精靈動畫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、 頁此函數實現的功能是繪制窗口,如在玩游戲的時候,當你要重新開始時,系統(tǒng)就會彈一個窗口,詢問你是否重新開始。3、IEnumerator PlaySound (AudioClip soundName)if(!audio.isPlaying)audio.clip = soundName;audio.Play();yield return new WaitForSeconds(audio.clip.length);此函數實現的功能是音效的控制,在什么時候停止、暫?;蛘卟シ诺取?.37.3 粒子系統(tǒng)的實現粒子系統(tǒng)的實現游戲項目下雪的天氣效果就是通過 Unity3D 粒子系統(tǒng)來實現的。首先,創(chuàng)建一個空白

44、的 GameObject,然后把粒子系統(tǒng)游戲組件添加到里面,步驟如下:Component-Effects-Particle System;設置參數如下圖 7.2、7.3、7.4 所示:圖 7.2 雪粒子參數第 21 頁 共 33 頁圖 7.3 雪粒子參數圖 7.4 雪粒子參數其他選項不需要勾選就能呈現出下雪的效果了。7.47.4 碰撞檢測的實現碰撞檢測的實現這里僅列舉一個碰撞檢測函數,首先得在相應的兩個游戲對象上面添加碰撞檢測器和剛體組件,具體步驟如下:Component-Physics-Collider;Component-Physics-Rigidbody;注意不要勾選重力,代碼實現如下:

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;該碰撞檢測函數使用的是觸發(fā)器,檢測的是玩家對象是否碰撞到飛鳥以及飛鏢是否碰撞到飛鏢,進而實現不同的游戲功能。7.57.5 音效的實現音效的實現音效

46、主要有背景音樂、人物音效、飛鏢音效等。實現游戲音效,只需要在主像機添加一個 Audio Listener 游戲組件,具體步驟如下: Component-Audio-Audio Listener;然后在相應的游戲對象上面添加 Audio Source 游戲組件,具體步驟如下:Component-Audio-Audio Source;如圖 7.5 所示:圖 7.5 音效組件最后再用代碼進行相應的控制就行了。7.67.6 游戲通關游戲通關在玩家通過關卡一得到 100 分之后,將選擇進入關卡二,如果再得到 200第 23 頁 共 33 頁分就將通關,進入獲勝場景。此刻玩家可以看見自己分數和最高分,選擇

47、是否重新開始游戲。選關場景如圖 7.6 所示:圖 7.6 下一關界面7.77.7 游戲失敗游戲失敗如果玩家在游戲過程中沒有躲避雪球或者飛鳥的攻擊,那么游戲就會失敗。游戲失敗之后,就會調用繪制窗口的函數,繪制一個選擇窗口。然后,玩家可以選擇繼續(xù)游戲或者退出游戲。繼續(xù)游戲將回到游戲開始界面,并進入一關,不能直接進行第二關,即使之前通過了第一關也不行。8 8項目總結項目總結8.18.1 總結的目的總結的目的項目在開發(fā)的過程中,遇到很多的問題,是需要總結并記錄的,以便于下次在遇到同樣的問題時,能夠快速高效的解決該問題,以節(jié)省游戲項目的開發(fā)周期,降低開發(fā)的成本。并且,對一個已完成游戲項目的總結,在他人學

48、習該項目時,可以提供很好的幫助。8.28.2 關鍵性問題總結關鍵性問題總結第一個關鍵性問題是精靈動畫在貼圖的時候遇到的麻煩。剛開始用是Unity3D 的平面組件來進行貼圖,但是貼圖用上去之后,運行時,精靈在運動第 24 頁 共 33 頁的時候是倒立的,在檢視器窗口中進行手動旋轉 180 度之后,貌似問題解決了,但是在腳本控制精靈運動的時候就會出現意想不到的運動,比如代碼明明寫的是讓精靈水平運動,但是精靈卻是斜著走的。然后,我又試著用盒子組件來進行貼圖,問題就更加千奇百怪了。最后,終于找到了解決辦法:用 Maya 創(chuàng)建一個平面,讓這個平面的繞 X 軸旋轉 90 度,然后繞 Y 軸旋轉 180 度,使得自身

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論