NavMesh是Unity自帶的一種尋路系統,能夠輕松簡單地實現AI自動尋路效果。
自動尋路是AI中的一個十分重要的分支,尋路算法一般也是十分復雜的。但Unity為我們提供了十分成熟的NavMesh組件用以簡單地解決這一問題,使初學者也能夠輕松實現尋路功能。
NavMesh尋路系統的操作步驟大致如下:
- 對場景中的物體進行標記,然后進行路徑烘培,產生表格數據。
- 為需要實現尋路功能的物體添加NavMeshAgent組件。
- 通過NavMeshAgent組件的屬性與方法實現尋路移動功能。
NavMesh的使用如下圖所示:
【1】標記與烘培
若想要讓你的游戲場景被NevMesh所“認可”,場景內的相應物體都必須被指定為Navigation Static。我們可以通過Navigation菜單欄中設定其狀態,也可以直接在Inspector中把物體設定為Static。
設定完成之后,就可以通過Navigation菜單欄的Bake選項卡來對游戲場景進行烘培。烘培的效果是肉眼可見的,我們可以直接在游戲場景中看到場景的烘培效果,如官方圖所示:
其次,在Bake選項卡中還可以設定尋路系統的一些細節,例如:
- Agent Radius:Agent的中心與障礙物的距離。
- Agent Height:Agent可通過的最低高度。
- Max Slope:Agent可爬上的最高坡度。
- Step Height:Agent可上的台階高度。
【2】添加NavMeshAgent組件
烘培完成之后直接將此組件添加到需要尋路的物體上即可。
NavMeshAgent組件中也有很多參數可以修改,以實現不同的尋路效果。
- Speed:Agent的最高速度。
- Angular Speed:最大的轉向速度。
- Acceleration:Agent達到Speed過程中的加速度。
- Stopping Distance:在距離目的地多遠的距離停下。
- Auto Braking:在終點是否會自動停下。
- Priority:Agent的權重。
【3】用腳本操作NavMesh
接着實現一個簡單的腳本,為Agent設定目的地即可。例如:
1 public class NavMove : MonoBehaviour 2 { 3 public Transform goal; 4 NavMeshAgent agent; 5 void Start() 6 { 7 agent = GetComponent<NavMeshAgent>(); 8 } 9 void Update() 10 { 11 agent.destination = goal.position; 12 } 13 }
對於更加復雜的功能以及其實現原理,可以通過Unity3D的官方文檔查看。