天天看點

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

本節書摘來異步社群《unity 4 3d開發實戰詳解》一書中的第6章,第6.7節,作者: 吳亞峰 , 杜化美 , 張月霞 , 索依娜 責編: 張濤,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

unity 4 3d開發實戰詳解

前面已經詳細介紹了unity中實體引擎的基礎知識,同時,通過一些小案例來具體介紹了實體引擎的相關應用。本小節将通過一個綜合案例,使讀者對unity中的實體引擎有進一步的了解。

1.案例的構思

開發案例首先要有一個明确的思路,倘若思路混亂,就會導緻案例的整體不協調。接下來介紹一下本案例的設計思路。

(1)首先要明确案例要達到的目的。本案例是為了示範實體引擎模拟現實的特性。

(2)接着要明确案例場景的周邊環境,要确定場景的天氣。本案例中,為了使用粒子系統,決定将情景設定為大雪紛飛的環境,是以天空盒要選擇陰天。

(3)接着就是對案例的核心主題部分進行設計。在本案例中,将要搭建一個足球門,門前采用預制件技術産生5×5×5整齊堆放的立方體堆。

(4)關于界面的觸控事件,本案例中采用每次觸控都産生一個向前飛出的足球,以撞擊方塊堆,然後射入足球門中。此處也要采用預制件技術。

2.案例場景的設計

關于場景環境的設計首先是天空盒的選擇,接着是大雪場景的制造。具體的操作過程如下。

(1)建立一個場景,在菜單欄中選擇file,打開檔案操作按鈕。選擇new scene,建立一個場景。按快捷鍵ctrl+s儲存該場景,命名為“football”。

(2)建立一個平面。在菜單欄中單擊gameobject→create other→plane菜單,将此平面拖曳到錄影機視野之内,然後将地闆紋理圖拖曳到此平面上,其參數如圖6-166所示。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

(3)選擇錄影機“maincamera”對象,在菜單欄中選擇“component”選項,在“元件添加”菜單中選擇“rendering”,在彈出的渲染菜單中選擇“skybox”,如圖6-167所示。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

(4)導入天空盒資源,在資源清單中的空白處單擊滑鼠右鍵,彈出資源操作清單,選擇“import package”,如圖6-168所示。在彈出的資源包清單中選擇“skyboxes”,如圖6-169所示。經過此操作導入了天空盒資源。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

(5)為錄影機的天空盒指定類型,選中錄影機,在屬性檢視器中,單擊skybox的屬性custom skybox的右邊的屬性框,此時會彈出天空盒選擇框,選擇eerie skybox,如圖6-170所示。

(6)添加大雪效果,這就需要粒子系統技術了。在菜單欄中單擊gameobject選項,在彈出的遊戲對象操作菜單中選擇create other,此時會彈出“建立其他”菜單,選擇particle system選項,如圖6-171所示。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

(7)将粒子系統的shape元件的shape屬性設定為sphere,如圖6-172所示。在場景設計面闆中将粒子系統拖曳到錄影機的斜上方,使噴射器在錄影機視野内部不可見,即可達到大雪效果。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

3.案例主體部分設計——足球門

(1)導入足球門的fbx模型。本案例中需要用到足球門的模型,模型的導入在後面的章節中會有詳細的介紹。模型的資源檔案“soccer_goal.fbx”位于随書CD光牒中源代碼/第6章/資源包目錄下。

(2)單擊gameobject→create empty菜單,建立一個空遊戲對象。然後單擊gameobject→create empty再次建立空遊戲對象,命名為structure,并将structure拖曳到gameobject下成為其子對象。

(3)選中structure對象,單擊component→mesh→mesh filter菜單,為structure對象添加網格過濾器,如圖6-173所示。然後在屬性檢視器中選擇mesh為前面導入的goal_metal_structure,如圖6-174所示。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

(4)選中structure對象,單擊component→mesh→mesh renderer菜單,為structure對象添加網格渲染器,如圖6-175所示。然後在屬性檢視器中可以更改渲染器的設定,如圖6-176所示。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例
提示 讀者應該注意的是mesh必須添加渲染器以後才會在場景中顯現出來。

(5)選中structure對象,單擊component→physics→mesh collider菜單,為structure對象添加網格碰撞元件,如圖6-177所示。然後在屬性檢視器中可以看到添加的mesh collider,如圖6-178所示。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

(6)調整屬性檢視器中structure的transform屬性,使其大小和位置符合場景的需要,具體參數設定如圖6-179所示。同時調整錄影機的transform參數,使其能夠完全看到場景中的對象,具體參數如圖6-180所示。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

(7)接下來為球門添加門柱。單擊gameobject→create empty菜單建立空對象,重命名為liang。然後将其拖曳到gameobject對象下,使其成為子對象。重複第(3)步、第(4)步操作,為對象添加元件,然後單擊component為對象添加box collider元件。最終liang對象在屬性檢視器中的參數如圖6-181所示。

(8)重複上述第(7)步操作,再次添加兩個對象,使其分别位于球門的左右兩側充當門柱。其在屬性檢視器中的設定如圖6-182和圖6-183所示。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例
《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

(9)經過上述操作,球門的基本架構已經搭建完成,其在hierarchy面闆的對應位置如圖6-184所示。其在scene面闆中的場景如圖6-185所示。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

(10)接下來為球門添加球網。單擊gameobject→create other→cloth菜單,添加一個布料,如圖6-186所示。

(11)調整檢視器中布料的大小,并在布料的attached collider屬性中設定size為4,使每個collider分别對應剛才建立的球門structure以及門柱對象,如圖6-187所示。然後在cloth renderer屬性下為布料添加材質(實質是為球網貼一個球網的貼圖),具體設定如圖6-188所示。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例
《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例
球網的材質是使用一張透明的球網貼圖制作的,材質制作的知識前面已經講解過,貼圖資源檔案“net_01.png”位于随書CD光牒中源代碼/第6章/資源包目錄下。

經過以上的操作,案例中關于球門的部分已經搭建完成。點選unity遊戲播放按鈕,可以在game視窗中看到球門以及球網,如圖6-189所示。

4.案例主體部分設計——發射足球及碰撞

本案例遊戲的另外一個主體部分是可互動的。在此部分中包括堆疊的方塊和發射的足球,在此部分中使用的是腳本和預制件技術。具體的開發過程如下。

(1)建立預制件,在資源清單中的空白處單擊滑鼠右鍵,在彈出的資源菜單中選擇“create”,在建立菜單中選擇“prefab”,如圖6-190所示。接着重複操作建立一個名為“soccerballrigidbody”的預制件。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

(2)單擊gameobject→create other→cube菜單,建立一個cube對象。選擇此對象,單擊component→physics→rigidbody選項,為cube對象添加剛體。

(3)将剛剛建立的cube遊戲對象拖曳到第(1)步建立的預制件“cube”,以設定預制件。

(4)按照順序gameobject→createother→sphere進行操作,建立一個球體。

(5)選中球體(sphere)遊戲對象,在菜單欄中點選“component”選項,在彈出的元件添加菜單中分别為對象添加mesh filter、mesh renderer、sphere collider以及rigidbody,如圖6-191所示。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

(6)将剛剛建立的球體遊戲對象拖曳到第(1)步中建立的預制件“soccerballridibody”上,以設定足球預制件。

(7)為錄影機添加腳本。首先右擊資源清單空白處,在資源清單中,選擇“create”選項,在彈出的建立菜單中選擇“javascript”,則建立了一個javascript腳本,如圖6-192所示。選中剛建立的腳本,然後再次單擊為其重命名為“initcube”。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

(8)編寫錄影機腳本。輕按兩下剛建立的腳本,等待片刻,則會進入腳本編輯器,在腳本編輯器中進行代碼編寫。錄影機需要完成方塊堆的初始化工作,其具體代碼如下所示。

第1-2行為變量的定義,非私有變量都可以在屬性檢視器中看到并且予以指派。

第3-13行為start方法的重寫,主要是為了程式開始時在場景的某個固定的地方産生一堆立方體。

(9)關閉腳本編輯器,将資源清單中的腳本拖曳到遊戲對象清單中的錄影機對象“maincamera”上。選中錄影機對象,則可見錄影機中被添加了一個腳本元件“initcube”,如圖6-193所示。

(10)将資源清單中的cube預制件,拖曳到init cube腳本元件中的cube屬性的右側屬性框中,完成對腳本的屬性指派,如圖6-194所示。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

(11)單擊gameobject→create empty選項,建立一個空對象,重命名為faqiu。為對象添加腳本控制足球的發射。首先在資源清單空白處單擊滑鼠右鍵,在資源清單中,選擇“create”選項,在彈出的建立菜單中選擇“javascript”,則建立了一個javascript腳本,重命名為“faqiu”。

(12)編寫faqiu對象腳本。輕按兩下剛建立的腳本,等待片刻,則會進入腳本編輯器,在腳本編輯中進行代碼編寫。腳本需要控制完成發射足球的工作,其具體代碼如下所示。

第1-3行為變量的定義,非私有變量都可以在屬性檢視器中看到并且予以指派。

第4-7行為start方法的重寫,主要是初始化rocket變量。

第8-14行為定義firerocket方法,主要是當調用該方法時生成一個rocket足球對象,然後給予該對象一個初速度。

第15-22行為update方法的重寫,主要是當觸發“fire1”事件時,就調用firerocket方法發射出一個球。

(13)關閉腳本編輯器,将腳本拖曳到faqiu對象上,并将資源清單中的soccerballrigidbody預制件,拖曳到faqiu腳本元件中的soccer ball屬性的右側屬性框中,完成對腳本的屬性指派,如圖6-195所示。

點選遊戲運作按鈕,觀看案例運作效果,如圖6-196所示。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

5.案例運作效果

至此案例的開發基本都完成了,本案例可以釋出成exe可執行檔案在pc上運作,也可以點選unity引擎裡的運作按鈕直接觀看和體驗運作效果。當然,也可以釋出到android裝置上運作,運作效果如圖6-197所示。

《Unity 4 3D開發實戰詳解》一6.7 實體引擎綜合案例

6.案例開發總結

至此本案例的開發已經結束,細心的讀者應該注意到了,在開發過程中有多處對參數的設定,這些修改都是憑借經驗來進行的。沒有經驗的初學者可以在特定範圍内進行嘗試,以體驗不同的取值帶來的不同視覺感受,這一階段對于初學者是必不可少的。

在本案例的開發過程中,同時使用了剛體、粒子系統和互動布料。将多種技術用在同一個場景中在案例開發過程中是很常見的,初學者要提高綜合運用能力,才能對各種技術的了解更加深入,開發的思路也更加開闊。

繼續閱讀