[Unity] 利用NavMesh 及 Nav Mesh Agent 實現導航功能

[Unity] 利用NavMesh 及 Nav Mesh Agent 實現導航功能

更新於 發佈於 閱讀時間約 5 分鐘

遊戲裡面都會有導航系統,在Unity裡面就是利用NavMesh實現這個功能。
其實說是導航系統,NavMesh是建立導航系統的可移動範圍,再根據你的需求寫導航功能。


以下來實作:
首先建立一個Terrain、一個Cube及一個Cylinder,如紅圈裡的示範

接著設定個別物件,選定Cylinder後找到Navigation欄位裡的Object,如果找不到Navigation的話可以在Windows裡面找到。
首先需要把物件設定成Navigation Static,在Unity裡如果要烘焙可移動需的話需要先把物件設定成不可移動及可以行走的特性,像是牆壁或是階梯等等。

也可以在選取物件後在Inspector視窗裡的Static選取

Generate OffMeshLinkenerate OffMeshLink是分離移動區連結的設定,這邊先不介紹。
接著是Navigation Area,這裡有Walkable、NotWalkabe及Jump。我們先移動到Area標籤裡,可以看到以下畫面,這裡可以看到這三個有各自的Cost,Cost代表是行走的難易度,
Not Walkabe字面上當然是不能行走,可行走Walkable是1,需要跳躍的是Jump的2,所以在導航時會優先選優先度高的Walkable而不是Jump。
當然也可以依需求設定新的區域的優先度。

最後是Bake標籤,當設定都完成後就到Bake標籤,可以看到下面欄位分別表示:

Agent Radius:含Agent元件的物件半徑,判斷是否接觸牆壁、障礙物或目標,同時也會影響某些路徑是否成立。

Agent Height:含有Agent元件的物件高度,如果是有天花板的環境下,有條路徑可通行但天花板低於移動物件,還是會被視為不可通行。

Max Slope:決定斜坡的最大角度,低於此數值可以被視為路徑,超過則不可通行。

Step Height:決定高度差在多少數值內,會被視為相連路徑,超過則不可通行。

這裡的Generate Off Mesh Links也先不做介紹,接著是Advanceddvanced欄位,分別表示:

Manual Voxel Size:決定生成NavMesh的像素大小,會影響生成出來的NavMesh精確度。

Min Region Area:決定最小面積,物件的面積小於此數值,不會被視為可移動的路徑。

Height Mesh:會儲存原始高度的資訊,但會影響效能與記憶體。

設定好後就可以按下Bake烘焙NavMesh了,完成後會看到下圖,可行走區域會以藍色表示,畫面右下角可以選擇是否開始NavMesh。

接著就是導航部份了!!

不過由於這次準備時間錯開,不小心弄壞了,所以重新拉了幾個cube

這次的場景如下

首先把要導航的物件加進去,接著幫她加入Nav Mesh Agent這個component

參數說明

Agent Type:導航類型,可以設定多種導航的模式,可以在Navgation視窗中的Agent標籤裡設定

Base Offset:物件相對於Agent元件的位移

Speed:導航時的移動速度

Angular Speed:導航時的旋轉速度

Acceleration:導航時的最大加速度

Stopping Distance:與目標達到一定距離時停止導航

Auto Braking:是否自動剎車,避免到目標時超過目標

Radius:元件的半徑

Height:元件的高度

Quality:迴避障礙物的準確度

Priority:迴避優先度,優先度高的物件不會被優先度低的物件阻擋

Auto Traverse Off Mesh Link:是否要讓物件做Off Mesh Link分離移動區的移動

Auto Repath:如果原本的路徑失效是否要重新規畫路徑

Area Mask:選擇路經規劃區域

設定完成後新增一個script給他,這邊使用的是C#,內容如下

using UnityEngine;
using UnityEngine.AI;
public class NavToTarget : MonoBehaviour {
public Transform target;
public NavMeshAgent agent;
void Start()
{
agent = GetComponent<NavMeshAgent>();//取得物件的Agent元件
}
void Update()
{
agent.SetDestination(target.position);//取得目標的位置
}
}

接著在場景中新增一個目標,把目標指派給物件

設定完成後就可以執行看看效果如何囉!


avatar-img
程式輕鬆玩
71會員
145內容數
這裡將以輕鬆風格,深入探討程式設計的基礎和高級概念。從程式語言到演算法,我們將以易懂的方式解釋每個主題,讓你輕鬆掌握。無論你是初學者或有經驗者,都能在這裡找到適合你的內容。無論你的目標是成為專業開發者還是擴展知識,我們都會陪伴你一同成長!
留言
avatar-img
留言分享你的想法!
程式輕鬆玩 的其他內容
本週科技圈掀起多項重磅消息:OpenAI於4月14日釋出GPT‑4.1系列模型,進一步強化編碼與長文理解能力 Reuters;Chipolo推出POP藍牙追蹤器,同時支援Apple與Google尋找網路 The Verge;南韓新創RLWRLD完成1,480萬美元募資,將打造專屬機器人基礎模型
本週遊戲動態涵蓋經典 25 週年重返 PC 平台、回合制策略新作重燃星戰熱潮、Remedy 荒誕合擊新作搶先曝光、Game Pass 下架名單震撼登場,以及 Steam 獨立新秀推薦不容錯過 PC GamerWindows Central。
近來因為川普政府啟動全新一輪對等關稅政策,全球貿易風暴席捲而來,而台灣面臨的衝擊更是不容小覷。美方以台灣過去對美出口關稅達64%為依據,採取「對等關稅」原則回敬徵收32%關稅,這一舉措不僅使得國際市場恐慌連連,台股也出現劇烈下跌,吸引了各界關注。
本週科技圈掀起多項重磅消息:OpenAI於4月14日釋出GPT‑4.1系列模型,進一步強化編碼與長文理解能力 Reuters;Chipolo推出POP藍牙追蹤器,同時支援Apple與Google尋找網路 The Verge;南韓新創RLWRLD完成1,480萬美元募資,將打造專屬機器人基礎模型
本週遊戲動態涵蓋經典 25 週年重返 PC 平台、回合制策略新作重燃星戰熱潮、Remedy 荒誕合擊新作搶先曝光、Game Pass 下架名單震撼登場,以及 Steam 獨立新秀推薦不容錯過 PC GamerWindows Central。
近來因為川普政府啟動全新一輪對等關稅政策,全球貿易風暴席捲而來,而台灣面臨的衝擊更是不容小覷。美方以台灣過去對美出口關稅達64%為依據,採取「對等關稅」原則回敬徵收32%關稅,這一舉措不僅使得國際市場恐慌連連,台股也出現劇烈下跌,吸引了各界關注。