1.介紹
NavMesh:是一種根據場景中幾何圖像創建出來的3D網格。它會使導航和尋路變得很容易。
簡單來說,NavMesh是一種我們在游戲世界中,可以讓游戲角色在其表面行走並且導航的平面。
2.注意
這只對3D的環境有效。
顯然,首先需要搭建環境場景。
這是我使用的場景:
3.現在來看看如何使用NavMesh
在你完成環境搭建后,從窗口菜單打開Navigation 窗口。
現在,選中你所有的環境組件並且確保Navigation菜單中的Navigation Static 這一項勾上了。
這里的,Navigation Static意味着在游戲運行期間,這個游戲對象不會移動
點擊Bake按鈕來創建NavMesh。你將會看到環境中覆蓋有藍色的一層表面。
藍色
的一層叫做可行走區域,也就是讓我們的玩家或者敵人可以暢通無阻的地方。
你可以在Navigation 窗口的Bake標簽下,通過調節參數來改變可行走的區域大小。

你可以使用這些參數,來設定可跨越高度,可穿行橫切面最大值,可跨躍的距離等等。
4.敵人追蹤玩家
這樣,我們游戲中已經有了NavMesh了。現在看看怎樣讓角色在這些NavMesh上進行移動。
首先,從層級視圖選中角色並從檢視面板添加NavMesh Agent組件。
我建議,創建的角色最好是一個玩家和兩個敵人。通過改變這些值你可以改變你角色導航的行為。
我用一個比較簡單的移動腳本使敵人去追蹤玩家 。
using UnityEngine.AI;
1 public class EnemyMovement : MonoBehaviour 2 { 3 Transform player; 4 // 獲取玩家位置 5 6 NavMeshAgent nav; 7 // 獲取NavMesh Agen't 8 9 void Awake () 10 { 11 // 引用賦值 12 player = GameObject.FindGameObjectWithTag ("Player").transform; 13 14 // 如果場景層級過多,建議不要使用 FindGameObjectWithTag的方法 15 // 鑒於這種情況,可以把玩家設置成公共變量,或者從檢視面板中設置引用 16 17 nav = GetComponent <NavMeshAgent> (); 18 } 19 20 void Update () 21 { 22 // 設置目標為玩家的尋路代理的目的地 23 nav.SetDestination (player.position); 24 } 25}
這個腳本中我們需要着重注意的是NavMeshAgent所帶的SetDestination()方法。如你所見我將這個函數放在了Update中執行,因為我們的玩家在持續地進行移動。
如果游戲中的目標不會改變他們的位置,那么你可以在Start函數中使用這個方法,或者在代碼中任何其他適合你需求的地方使用這個方法。
然后剩下的就都交給NavMeshAgent去做了。
聲明:本文章來自網絡前輩所匯而成,有不懂的地方小白建議大家去原網址http://vr.99.com/news/06232017/011147334.shtml
