Unity3D開發標準教程-課程設計-探險飛機_第1頁
Unity3D開發標準教程-課程設計-探險飛機_第2頁
Unity3D開發標準教程-課程設計-探險飛機_第3頁
Unity3D開發標準教程-課程設計-探險飛機_第4頁
Unity3D開發標準教程-課程設計-探險飛機_第5頁
已閱讀5頁,還剩32頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第1頁課程設計—探險飛機第2頁12.1背景以及功能概述12.1.1游戲背景概述此類游戲畫面精美,操作簡單,成為打發閑暇時間的不二之選。

圖12-1跳舞的線圖12-2鋼琴塊2 圖12-3開心消消樂

第3頁12.1背景以及功能概述12.1.2游戲功能簡介(1)運行游戲后,首先顯示的是本游戲的主菜單界面,如圖12-4所示。在主菜單界面中有本游戲的中文標識“探險飛機”,下面是“開始游戲”按鈕,在本界面的右上角是音效按鈕,初始默認開啟音效。單擊音效按鈕,即可控制游戲音效的開啟或關閉。

圖12-4主菜單界面

第4頁12.1背景以及功能概述12.1.2游戲功能簡介(2)單擊主菜單界面的“開始游戲”按鈕進入游戲場景,如圖12-5所示。在游戲中點擊屏幕的左右半區,控制飛機左右旋轉。每通過一個障礙物,得分加1,如圖12-6所示。飛機沒有通過障礙,與障礙物發生碰撞,則游戲失敗,如圖12-7所示,單擊“重新開始“按鈕即可重新開始游戲。

圖12-6游戲界面圖12-7游戲失敗界面第5頁12.2游戲的策劃及準備工作12.2.1游戲的策劃游戲類型運行目標平臺目標受眾操作方式呈現技術

第6頁12.2游戲的策劃及準備工作12.2.2使用Unity3D開發游戲前的準備工作本游戲中所用到的背景圖片、天空盒紋理圖和菜單項所需資源圖片本游戲中所有音效游戲中按鈕的圖片資源記分板的數字圖片資源3D模型是用3dMax生成的FBX文件導入

第7頁12.3游戲的架構12.3.1游戲中各場景的簡要介紹主菜單場景:游戲中的主場景主要是用來顯示游戲的標題和開始按鈕,點擊開始游戲界面即可進入關卡。

圖12-10主菜單架構圖第8頁12.3游戲的架構12.3.1游戲中各場景的簡要介紹關卡場景:本場景是該游戲最重要的場景,這個場景的游戲一些對象被附加了相應的腳本,比如主攝像機、飛機、障礙物等,在游戲的關卡界面,關卡是循環生成的、點擊屏幕的兩側,可以控制飛機的旋轉。同時屏幕上方還能顯示游戲的得分,“重新開始”按鈕還能控制游戲重新開始等。

第9頁12.3游戲的架構12.3.2游戲的架構簡介(1)運行本游戲,首先會進入到主菜單場景“MainMenu”。此界面是用UGUI編寫而成,UGUI控件與控件之間可以進行嵌套,。整個場景背景為一個天空盒,腳本控制主攝像機旋轉,從而實現動態效果,然后在一塊畫布上放置按鈕圖片(開始游戲,開啟音效或關閉音效)。(2)當第一次進入此游戲時,音效是默認開啟的。如果玩家需要關閉游戲中的音效,可以單擊右上角的音效控制按鈕。如若單擊按鈕則會觸發掛載在按鈕上的腳本里的方法,如“開啟音效”按鈕的KQOnClick方法、“關閉音效”按鈕的GBOnClick方法。

第10頁12.3游戲的架構12.3.2游戲的架構簡介(3)單擊主菜單場景中的“開始游戲”按鈕進入游戲界面后,將會觸發掛載在攝像機上控制障礙物移動的ObstacleMove類、控制游戲重新開始的GameControl類、掛載在障礙物上控制障礙物隨機旋轉的ObstacleControl類以及掛載在記分板上改變游戲得分的ScoreBoard類。(4)飛機在飛行過程中需要改變角度才能安全的穿越障礙物,玩家在點擊屏幕時將會觸發掛載在飛機上控制它旋轉、游戲對象碰撞檢測、成功穿越障礙物得分以及發生碰撞后重新開始的AirPlaneControl類。

第11頁12.4游戲場景12.4.1游戲主菜單場景(1)首先新建項目,然后新建場景并設置環境光。接著新建一個Canvas,具體操作為單擊左側“Hierarchy”面板上方Create→UI→Canvas,如圖12-9所示。即可看到在窗口中創建了一個畫布,畫布相關信息如圖12-10所示。

圖12-9創建畫布 圖12-10“Canvas”面板設置第12頁12.4游戲場景12.4.1游戲主菜單場景(2)接著創建兩個Button,分別對應““開啟音效”和“關閉音效”按鈕。如圖12-11所示。然后將預先放置在Textures文件夾下的“off.png”圖片和“on.png”圖片拖曳到Button的“Image”組件“SourceImage”上,最后分別重命名為“on”、““off”,如圖12-12所示。

圖12-11創建Button 圖12-12“on”面板設置第13頁12.4游戲場景12.4.1游戲主菜單場景(3)之后創建一個天空盒來作為主菜單背景,具體操作為新建一個名為“Material”的文件夾,然后選中文件夾單擊鼠標右鍵,選擇Create→Material,如圖12-13所示,并將其命名為“Skybox”。在“Material”文件夾中即可看到剛剛創建的材質。

圖12-13創建Material 第14頁12.4游戲場景12.4.1游戲主菜單場景(4)接著選中剛剛創建的“Skybox”材質,在屬性查看器中修改去渲染方式為Skybox模式,具體的修改步驟為單擊Shader→Skybox→6Sided。修改完成后,我們將準備好的天空盒紋理圖拖入到相對應的位置,如圖12-14所示。

圖12-14天空盒屬性 第15頁12.4游戲場景12.4.1游戲主菜單場景(5)制作好天空盒后,我們需要做的是在Unity集成開發環境中對其進行相關的設置并將其顯示出來。選中場景中的攝像機,依次單擊菜單欄中Component→Rendering→Skybox為其添加天空盒組件,如圖12-16所示。并在將之做好的天空盒拖到Skybox處,如圖12-17所示。

圖12-15添加天空盒1圖12-16添加天空盒2第16頁12.4游戲場景12.4.1游戲主菜單場景(6)新建一個C#腳本,具體操作為單擊鼠標右鍵,選擇Create→C#Script,將其命名為“Welcome.cs”。本腳本主要是控制天空盒旋轉,界面跳轉和音效的開啟或關閉,腳本代碼如下。1 usingSystem.Collections;2 usingSystem.Collections.Generic;3 usingUnityEngine;4 usingUnityEngine.SceneManagement; //導入系統包5 publicclassWelcome:MonoBehaviour{6 publicTexture2DTitle; //游戲名稱圖片7 publicTexture2DStartGame; //開始游戲按鈕圖片8 publicGUIStyleMystyle; //自定義Style9 publicGameObjectOn; //關閉音效按鈕10 publicGameObjectOff; //開啟關閉按鈕11 publicfloatrotateSpeed=1f; //攝像機旋轉速度

第17頁12.4游戲場景12.4.1游戲主菜單場景12 voidUpdate(){13 transform.Rotate(newVector3(0,rotateSpeed*Time.deltaTime,0));//旋轉14 }15 privatevoidOnGUI(){16 floatt_Heigh=Screen.height*0.30f; //定義標題圖片顯示寬度17 floatt_width=Screen.width*0.45f; //定義標題圖片顯示高度18 GUI.DrawTexture(newRect( //繪制標題19 Screen.width*0.5f-t_width/2, //設置圖片初始位置20 Screen.height*0.4f-t_Heigh/2,21 t_width,t_Heigh),Title); //設置圖片尺寸22 floatb_width=Screen.width*0.5f; //定義開始游戲按鈕寬度23 floatb_heigh=Screen.height*0.2f; //定義開始游戲按鈕高度24 if(GUI.Button(newRect( //判斷是否點擊25 Screen.width*0.6f-b_width/2, //繪制開始游戲按鈕26 Screen.height*0.85f-b_heigh/2,

12.4游戲場景12.4.1游戲主菜單場景27 b_width,b_heigh),StartGame,Mystyle)){28 SceneManager.LoadScene("PlaneGame"); //加載游戲場景29 }}30 publicvoidKQOnClick(){ //開啟音效方法31 On.SetActive(true); //顯示On32 Off.SetActive(false); //隱藏Off33 AirPlaneControl.Soundflag=true; //設置聲音標志位為true34 }35 publicvoidGBOnClick(){ //關閉音效方法36 On.SetActive(false); //隱藏ON37 Off.SetActive(true); //開啟Off38 AirPlaneControl.Soundflag=false; //設置聲音標志位為false39 }}第18頁12.4游戲場景12.4.1游戲主菜單場景(7)編輯完成的腳本保存后,將其掛載到主攝像機和兩個按鈕上。打開主攝像機的屬性查看器,我們需要將準備好的紋理圖拖到對應位置,如圖12-18所示。然后打開按鈕屬性查看器,將兩個按鈕拖到對應位置,并設置對應的點擊事件,如圖12-19所示。第19頁圖12-17主攝像機屬性查看器

圖12-18按鈕屬性查看器第20頁12.4游戲場景12.4.2游戲障礙物的創建與移動腳本開發

(1)首先需要介紹游戲中障礙物的創建。一組障礙物由兩個相同的模型和中間的加分點Point,如圖12-20所示,并且每個可以觸發功能的游戲對象都添加了碰撞體。四組不同不同形狀的障礙物構成了一整組障礙物,整體效果如圖12-21所示。

圖12-19障礙物結構圖12-20障礙物效果12.4游戲場景12.4.2游戲障礙物的創建與移動腳本開發(2)前面介紹了障礙物組合的制作,下面將介紹障礙物相關腳本ObstacleMove.cs的開發。此腳本控制游戲場景中障礙物的循環生成,以及使飛機成功通過的障礙物隱藏消失。該腳本掛載到本場景的主攝像機上,并且需要將障礙物拖到對應位置。1 usingSystem.Collections;2 usingSystem.Collections.Generic;3 usingUnityEngine;4 publicclassObstacleMove:MonoBehaviour{5 publicstaticfloatMoveSpeed; //定義障礙物移動速度6 publicVector3StartPosition; //障礙物初始位置7 publicGameObject[]Obstacle; //存放障礙物數組8 privateVector3[]LoadPosition=newVector3[2]; //存放障礙物初始速度9 voidStart(){第21頁12.4游戲場景12.4.2游戲障礙物的創建與移動腳本開發10 MoveSpeed=15; //定義障礙物移動速度11 Obstacle[0].GetComponent<ObstacleControl>().ChangeObstacle();//改變第一組障礙物的角度12 Obstacle[1].GetComponent<ObstacleControl>().ChangeObstacle();//改變第二組障礙物的角度13 StartPosition=Obstacle[1].transform.position; //保存第二組障礙物的位置14 for(inti=0;i<LoadPosition.Length;i++){ //遍歷所有障礙物數組15 LoadPosition[i]=Obstacle[i].gameObject.transform.position; //儲存初始位置,用于恢復16 }}17 voidUpdate(){18 for(inti=0;i<Obstacle.Length;i++){ //遍歷所有障礙物19 Obstacle[i].transform.Translate(newVector3(0,0,-Time.deltaTime*MoveSpeed)); 20 if(Obstacle[i].transform.position.z<=-100){ //判斷障礙物是否需要移動21 Obstacle[i].GetComponent<ObstacleControl>().ChangeObstacle();第22頁12.4游戲場景12.4.2游戲障礙物的創建與移動腳本開發22 Obstacle[i].transform.position=StartPosition; //改變障礙物位置23 MoveSpeed=MoveSpeed+AirPlaneControl.score/4; //改變障礙物速度24 }}}25 publicvoidresetObstacle(){ //恢復位置方法26 for(inti=0;i<LoadPosition.Length;i++){ //遍歷障礙物數組27 Obstacle[i].gameObject.transform.position=LoadPosition[i];//得到初始數據28 }29 Obstacle[0].GetComponent<ObstacleControl>().ChangeObstacle();//改變障礙物角度30 StartPosition=Obstacle[1].transform.position; //保存第二組障礙物的位置31 }}第23頁12.4游戲場景12.4.2游戲障礙物的創建與移動腳本開發(3)上面介紹了用于控制障礙物旋轉與移動的腳本,下面將介紹用于控制障礙物顯示與隱藏,以及隨機改變障礙物的旋轉角度的腳本。該腳本掛載到每組Obstacle對象上。1 usingSystem.Collections;2 usingSystem.Collections.Generic;3 usingUnityEngine;4 publicclassObstacleControl:MonoBehaviour{5 publicGameObject[]Obstacle; //存放障礙物數組6 publicfloatleft=45f,right=-45f; //障礙物旋轉角度范圍7 privatevoidStart(){8 Random.seed=System.Environment.TickCount;//隨機數的種子9 }第24頁12.4游戲場景12.4.2游戲障礙物的創建與移動腳本開發10 publicvoidChangeObstacle(){ //障礙物變化方法11 floatRandomVal; //聲明一個隨機數12 for(inti=0;i<Obstacle.Length;i++){ //遍歷障礙物數組13 Obstacle[i].SetActive(true); //顯示障礙物對象14 RandomVal=Random.value; //隨機數賦值15 floatObRota_z=Mathf.Lerp(left,right,RandomVal);//生成障礙物旋轉參數16 Obstacle[i].transform.Rotate(0,0,ObRota_z);//使每個障礙物旋轉17 }}18 publicvoidhidden(){ //隱藏障礙物方法19 for(inti=0;i<Obstacle.Length;i++){ //遍歷障礙物數組20 Obstacle[i].SetActive(false); //隱藏障礙物21 }}}第25頁第26頁12.4游戲場景12.4.3游戲物體的創建和運動控制腳本開發(1)首先導入放置在“Model”文件夾下的的飛機模型,打開文件夾選中模型后拖到游戲場景中,并調整其大小,位置,角度等參數,如圖12-21所示。然后為飛機游戲對象添加剛體與碰撞體,為后續進行碰撞檢測做準備,相關參數如圖12-22所示。

圖12-21游戲對象相關參數1圖12-22游戲對象相關參數2第27頁12.4游戲場景12.4.3游戲物體的創建和運動控制腳本開發(2)前面完成了對游戲對象相關參數的調整設置,接下來講介紹掛載在游戲對象上的AirPlaneControl.cs腳本。該腳本主要包括通過觸摸屏幕的不同區域實現對飛機的左右旋轉,以及飛機觸碰到游戲場景中的碰撞體后觸發的相關事件和相對應的音效等。具體開發過程如下。(3)腳本開發完畢后,將其掛載到飛機上后。還需要將音效文件和粒子系統拖曳到AirPlaneControl.cs腳本組件對應的變量處。AirPlaneControl.cs腳本組件如圖12-23所示。

圖12-23腳本組件第28頁12.4游戲場景12.4.3游戲物體的創建和運動控制腳本開發(4)接下來介紹飛機與障礙物碰撞時顯示的粒子系統。好的粒子系統可以極大的提高游戲的視覺體驗,在游戲的日常開發中也是必不可少的。由于前面的章節已經介紹過粒子系統的相關開發,所以此處只介紹兩個粒子系統的重要參數。如圖12-24、圖12-25所示。

圖12-24火焰粒子系統參數圖12-25爆炸粒子系統參數第29頁12.4游戲場景12.4.4游戲場景主攝像機腳本開發11 contact.point.x<=other.transform.position.x+0.1)){12 if(array_nameAndflag[0].Equals()){//判斷與列表中名字是否相同13 if(array_nameAndflag[1].Equals("up")){ //獲取“向上”方向14 this.GetComponent<Rigidbody>().velocity= //對小球進行轉向15 newVector3(0,0,this.GetComponent<Rigidbody>().velocity.magnitude*1.25f);16 }elseif(array_nameAndflag[1].Equals("down")){ //獲取“向下”方向17 this.GetComponent<Rigidbody>().velocity= //對小球進行轉向18 newVector3(0,0,-this.GetComponent<Rigidbody>().velocity.magnitude);19 }elseif(array_nameAndflag[1].Equals("right")){//獲取“向右”方向20 this.GetComponent<Rigidbody>().velocity= //對小球進行轉向21 newVector3(this.GetComponent<Rigidbody>().velocity.magnitude,0,0);22 }elseif(array_nameAndflag[1].Equals("left")){//獲取“向左”方向23 this.GetComponent<Rigidbody>().velocity= `//對小球進行轉向24 newVector3(-this.GetComponent<Rigidbody>().velocity.magnitude,0,0);}}

第30頁12.4游戲場景12.4.4游戲場景主攝像機腳本開發(1)首先將主攝像機的ProJection設置為“Orthographic”,即設置主攝像機的投影方式為正交投影,并為攝像機添加天空盒,設置為黑色背景,具體操作請參考主菜單界面的攝像機設置。(2)前面介紹完攝像機相關參數的設置。接下來將詳細介紹游戲控制腳本“GameControl.cs”的開發,新建C#腳本,將其重名為為GameControl,掛載到主攝像機上,然后雙擊腳本進入腳本編輯器,開始腳本的編寫,具體代碼如下所示。1 usingSystem.Collections;2 usingSystem.Collections.Generic;3 usingUnityEngine;4 publicclassGameControl:MonoBehaviour{5 publicboolisOver=false; //游戲結束標志位

12.4游戲場景12.4.4游戲場景主攝像機腳本開發6 publicGameObjectAirPlane; //飛機對象7 publicGameObjectScoreboard; //計分板對象8 publicGameObjectButton_reset; //重新開始按鈕9 voidUpdate(){10 isOver=AirPlane.GetComponent<AirPlaneControl>().isOver;//獲得結束標志位11 if(isOver){ //如果游戲結束12 Scoreboard.SetActive(false); //隱藏計分板13 Button_reset.SetActive(true); //顯示重新開始按鈕14 }else{15 Scoreboard.SetActive(true); //顯示計分板16 Button_reset.SetActive(false); //隱藏重新開始按鈕17 }}18 publicvoidreset(){//游戲重置方法19 isOver=false;//將結束標志位置為否20 AirPlane.GetComponent<AirPlaneControl>().resetAirPlane();//飛機上的重置方法21 this.gameObject.GetComponent<ObstacleMove>().resetObstacle();//障礙物重置方法22 }}第31頁第32頁12.4游戲場景12.4.5游戲計分板的創建和腳本開發(1)首先需要新建一個Canvas,前面已經介紹過創建過程,故此處省略創建過程。然后在Canvas的下層創建一個空對象并將其重命名為“ScoreBoard”,接著在ScoreBoard的下層創建兩個Image用于顯示數字,將其重命名為“Num1”和“Num2”,整體效果如圖12-26所示。

圖12-26計分板整體結構

12.4游戲場景12.4.5游戲計分板的創建和腳本開發(2)前面介紹完了計分板的創建,下面將介紹計分板的相關腳本ScoreBoard.cs的開發編寫流程。腳本的創建方法與之前腳本創建方法相同,過不再贅述。該腳本的功能為實時獲取玩家得分后,改變計分板對象的貼圖為對應的數字。具體代碼如下所示。1 usingSystem.Collections;2 usingSystem.Collections.Generic;3 usingUnityEngine;4 usingUnityEngine.UI;5 publicclassScoreBoard:MonoBehaviour{6 publicGameObjectNumSprite1; //十位數字貼圖7 publicGameObjectNumSprite2; //個位數字貼圖8 publicSprite[]Num; //數字貼圖9 voidUpdate(){10 drawScore(AirPlaneControl.score); //調用繪制得分方法11 }第33頁12.4游戲場景12 voiddrawScore(intnum){ //繪制計分板方法13 intnum1; //聲明十位數字14 intnum2; //聲明個位數字15 if(num>=100){ //得分大于等于100時,默認顯示9916 num1

溫馨提示

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

評論

0/150

提交評論