NavMesh導航網格尋路


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的官方文檔查看。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM