從零開始學基於ARKit的Unity3d遊戲開發系列10
歡迎繼續我們的學習。
在之前的課程中我們提到過,對於遊戲中的角色,最好是使用prefab預設體的方式在程序中生成,而不是直接放置在場景裡面。
在這一課的內容中,我們將實現這一點。
打開Unity,在Project視圖中右鍵單擊Assets,創建一個新的文件夾,將其命名為_Prefabs。之所以加下劃線,之前反覆強調過,是為了將開發者自己添加的遊戲資源和第三方插件中的遊戲資源區分開。
從Hierarchy視圖中將z@walk遊戲對象拖到Project視圖中的_Prefabs文件夾中,從而創建一個預設體,將其更名為zombieEnemy。然後從Hierarchy視圖中刪除該對象。
在Hierarchy視圖中點擊HItCubParent對象,選擇ruined_house,在Inspector視圖中點擊Add Component,添加一個新的腳本,並將其命名為SpawnController。
然後在MonoDevelop中打開該腳本文件,並更改其中的代碼如下:
using System.Collections; nusing System.Collections.Generic; nusing UnityEngine; n//1.導入UI相關的命名空間文件 nusing UnityEngine.UI; nnpublic class SpawnController : MonoBehaviour { nn//2.創建到敵人的引用 npublic GameObject zombie; nn//3.創建到開始遊戲按鈕的引用 npublic Button btnStartGame; nn// Use this for initialization nvoid Start () { nn//4.添加點擊事件的響應 nbtnStartGame.onClick.AddListener(StartInvoke); n} nn//5.處理開始遊戲 nvoid StartInvoke(){ nn } n} n
按照注釋行的數字編號來簡單解釋一下:
(1)導入跟UI相關的命名空間
(2)創建了一個GameObject對象,也就是對敵人對象的引用
(3)創建了對開始遊戲按鈕的引用
(4)添加了對開始遊戲按鈕點擊事件的響應機制
(5)該方法將用於處理點擊事件
注意到這裡我們把默認提供的Update方法刪除了,因為暫時不需要用到。
接下來回到Unity編輯器,把_Prefabs文件夾中的zombieEnemy預設體拖動到ruined_house對象的Spawn Controller組件的Zombie屬性處,如圖所示。
接下來我們需要創建一個按鈕。
在編輯器中的中間區域切換到Game視圖。
然後在Hierarchy視圖中右鍵單擊Canvas,選擇UI-Button,從而添加一個按鈕,將其命名為btn_StartGame。
將按鈕的文本內容更改為Start Game,並作出以下設置:
(1)將btn_StartGame按鈕的Image組件的Source Image設置為SF Window
(2)設置btn_StartGame按鈕的Rect Transform的Width和height為500,200
(3)設置文本字體為Jupiter
(4)設置字體大小為80
(5)設置文本的Color為純白色。
在Hierarchy視圖中選擇HitCubeParent下面的ruined_house對象,並將Spawn Controller組件的Btn Start Game屬性設置為剛剛添加的btn_StartGame按鈕對象。
接下來打開SpawnController.cs,並更改其中的StartInvoke方法,修改後的代碼如下:
using System.Collections; nusing System.Collections.Generic; nusing UnityEngine; n//導入UI相關的命名空間文件 nusing UnityEngine.UI; nnpublic class SpawnController : MonoBehaviour { nn//創建到敵人的引用 npublic GameObject zombie; nn//創建到開始遊戲按鈕的引用 npublic Button btnStartGame; nn// Use this for initialization nvoid Start () { nn//添加點擊事件的響應 nbtnStartGame.onClick.AddListener(StartInvoke); n} nn//處理開始遊戲 nvoid StartInvoke(){ nn//1.每5秒調用一次SpawnEnemy方法 nInvokeRepeating ("SpawnEnemy", 0f, 5f); n} nn//在場景中生成敵人 nvoid SpawnEnemy(){ n n//2.設置敵人的生成位置 nVector3 position = new Vector3 (Random.Range (-10f, 10f), Random.Range (-3f, 3f), Random, Range (-10f, 10f)); nn//3.在特定的位置生成敵人 nInstantiate (zombie, position, Quaternion.Euler (0, 0, 0)); n} n} n
接下來按照注釋行編號簡單解釋一下:
1.這裡使用InvokeRepeating方法來重新調用SpawnEnemey方法。
關於InvokeRepeating方法的使用,大家可以在官方文檔中搜索,https://docs.unity3d.com/ScriptReference/MonoBehaviour.InvokeRepeating.html
2.這裡創建了一個Vector3類型的變數 ,從而設置了敵人的生成位置。
同樣的,關於Vector3,可以在官方文檔中查看
https://docs.unity3d.com/ScriptReference/Vector3-ctor.html
3.使用Instantiate方法在特定的位置生成敵人。
https://docs.unity3d.com/ScriptReference/Object.Instantiate.html
注意這裡的旋轉角度使用了Quaternion類型,在Unity中,使用Quaternion來代表旋轉角度。
具體細節請參考官方文檔:
https://docs.unity3d.com/ScriptReference/Quaternion.html
https://docs.unity3d.com/ScriptReference/Quaternion.Euler.html
現在我們可以回到Unity編輯器,點擊工具欄上的Play按鈕預覽遊戲效果。
當我們點擊Start Game按鈕後,就會有敵人出現在場景中,並開始之後的遊戲邏輯。
如果一切順利,我們已經成功的完成了本課所要學習的內容了~
推薦閱讀:
※大萌喵的Unity後期特效第一發---鏡頭炫光與光暈(Flare)
※(Unity) 為被 Lua 隔斷的 C# 實現添加 Profiler 支持
※Unite 2016 針對移動設備端的Unity應用優化
※從零開始學基於ARKit的Unity3d遊戲開發系列6