Unity3D中的自動尋路
阿新 • • 發佈:2019-01-24
Unity3D中自動尋路的功能:
概述:
別人寫的教程,非常詳細,細節我就不贅述了。只寫一些自己的總結:
1. 什麼是導航網格:
“導航網格”,規定了使用自動尋路的GameObject所能或者不能通過的地方。
2. 如何生成導航網格:
選單欄: Window——Navigation,開啟導航網路控制面板。
選擇想要生成網格的遊戲物體,比如一個Plane,在”導航網格控制面板“中將“Navigation Static”打鉤,點選右下角的Bake,烘焙路徑,則可以看到自動生成的區域。Navigation Area則決定了這個區域是Walkable還是not Walkable或者是Jump。
3. 如何應用導航網格:
在自己的Player上新增一個“Nav Mesh Agent”元件,這個元件實現了自動尋路的功能,可以看做是一個封裝。設計者只要使用這個元件就好了,具體可以看官方說明。
舉個例子:
using UnityEngine; using System.Collections; public class SetHeroDes : MonoBehaviour { public Transform ds;//用來確定目的地座標的遊戲物體的Transform private Vector3 origin;//儲存導航網格代理的初始位置 private NavMeshAgent nma;//儲存導航網格代理元件 void Start() { nma = gameObject.GetComponent<NavMeshAgent>(); //取得導航網格代理元件 origin = transform.position; // 儲存一下這個指令碼所掛載遊戲物體的初始位置 nma.SetDestination(ds.position); // 關鍵點:操作NavMeshAgent元件,設定自動尋路的目標位置為我們通過ds所指定的點。 } }
把這個指令碼掛到想要自動尋路的遊戲物體,並指定目標位置遊戲物體。
簡單粗暴有木有?
nma.SetDestination(ds.position);
這句程式碼設定後,所掛載該指令碼的遊戲物體就開始依據我們通過Bake生成的導航網格自動尋路了。這個過程中,會自動繞過障礙物(通過Bake將這類遊戲物體烘焙為not walked)。
4. OffMeshLink是什麼?
按照我的理解,這個元件提供了不同的高度和導航網格中斷的處理方案,詳情看教程吧。
下面是別人教程的地址,非常詳細:
有些教程裡面的素材如果沒有,通通用cube代替,學到東西才是真的。我看這些教程時,由於是幾經轉載,都看不到圖的,就自己隨便弄個cube,Metrial之類的搞完再說。