判斷使用者的需求,並引導他們完成導航設定。如需擴充的元件細節、API 筆記、程式碼範例及疑難排解,請參閱 navigation-system.md。
傳遞 C# 給 eval
eval 編譯的是陳述式區塊,而非檔案。這會導致兩個後果,且都會產生編譯錯誤而非警告:
- 不能使用
using指示詞。 編譯器會將using UnityEngine;解讀為資源釋放陳述式而拒絕它(CS0210)。 - 型別必須使用完整名稱。 單純使用
AssetDatabase或Volume無法解析(CS0246/CS0103),而單純使用Object會與object產生歧義(CS0104)。
如果下方程式碼片段是以檔案形式撰寫(為方便閱讀而加入 using,或因為需要儲存到專案中),請在傳遞給 eval 之前將型別改為完整名稱。
路由邏輯
| 使用者說法 | 解讀 |
|---|---|
| 「加入導航」/「設定 nav」 | 完整設定:NavMeshSurface + 烘焙 + NavMeshAgent |
| 「讓這個角色導航」 | 加入 NavMeshAgent,確保 NavMesh 存在 |
| 「加入尋路」 | NavMeshAgent + 移動腳本 |
| 「代理不會移動」/「找不到路徑」 | 疑難排解 — 請參閱參考中的疑難排解決策樹 |
| 「避開障礙物」 | 啟用雕刻或迴避的 NavMeshObstacle |
| 「連接兩個區域」/「跳過去」 | 區域之間的 NavMeshLink |
| 「在點之間巡邏」 | NavMeshAgent + 巡邏腳本 |
| 「點擊移動」 | NavMeshAgent + 射線點擊移動腳本 |
| 「導航時讓角色動畫化」 | 將 Animator 與 NavMeshAgent 結合 |
| 「不同代理大小」 | 在 Navigation 視窗中配置代理類型 |
| 「區域和成本」/「限制區域」 | NavMesh 區域類型、修飾器和代理區域遮罩 |
工作流程
0. 套件安裝檢查
在執行任何操作之前,請先確認 com.unity.ai.navigation 已安裝。如果缺少此套件,請將其加入 Packages/manifest.json 的 dependencies 中 — Unity 會在編輯器下次取得焦點時自動解析,這個過程不需要編輯器連線:
"com.unity.ai.navigation": "<current 2.x version>"
不要自行編造版本字串。請從 Unity 註冊表讀取目前版本 — https://packages.unity.com/com.unity.ai.navigation 會列出所有已發布的版本 — 或者複製此 manifest 中相鄰 Unity 套件已使用的版本。不存在的版本會導致 Unity 無聲地解析失敗,因此錯誤的猜測就像什麼事都沒發生一樣。
只有在確認已安裝後才能繼續。如果您有可執行的編輯器來執行 C#,請參閱 navigation-system.md 中的 Client.Add 對應方法。
1. 預先檢查:評估目前的導航設定
在進行更改之前,先檢查已存在的內容:
- 找出現有的導航元件。如果編輯器已連線,請查詢即時場景中的
NavMeshSurface、NavMeshAgent、NavMeshObstacle、NavMeshLink與NavMeshModifier— 請參閱unity-cli技能以驅動執行中的編輯器。如果沒有連線,請搜尋場景和預製件檔案中的這些元件名稱。 - 透過 Window > AI > Navigation > Agents 索引標籤 檢查已配置的代理類型。
- 在提出變更之前,摘要列出所有偵測到的導航元件。
2. 收集遺漏的資訊
在建立元件之前,請確保使用者已指定:可行走表面、代理類型/大小、代理行為、障礙物、連結以及區域/成本需求。如有任何不清楚的地方,請提出詢問。詳細資訊收集檢查清單請參閱參考文件。
3. 規劃與執行
請依照下列一般順序進行。每個元件的逐步詳細說明請參閱參考文件中的元件設定指南:
- NavMesh Surface — 建立可行走網格(烘焙它)
- NavMesh Agent — 加入尋路角色
- NavMesh Obstacle — 加入動態障礙物
- NavMesh Link — 連接不相連的 NavMesh 區域
- NavMesh Modifier / Modifier Volume — 微調區域類型
- 腳本 — 移動、巡邏、點擊移動、動畫結合(請參閱參考文件中的常見食譜)
4. 驗證
設定完成後,請確認:
- NavMesh 已烘焙且可見(藍色疊層)
- NavMeshSurface 的代理類型與 NavMeshAgent 的代理類型相符
- 代理有通往目的地的有效路徑
- 障礙物正確雕刻或阻擋
- 連結兩端都已連接且「已啟用」為開啟
- 區域遮罩允許預期的移動
- 沒有衝突的元件(請參閱參考文件中的混合元件指南)
- 如果將 Rigidbody 與 NavMeshAgent 一起使用,請啟用 Is Kinematic
5. 最終確認
摘要列出已建立或更改的內容:
- NavMesh Surface:隸屬的 GameObject、代理類型、幾何模式、烘焙狀態
- NavMesh Agent:隸屬的 GameObject、速度、停止距離、區域遮罩
- NavMesh Obstacle:隸屬的 GameObject、形狀、雕刻開/關
- NavMesh Link:起點/終點、雙向、區域類型
- 腳本:附加到哪些 GameObject 的哪些腳本
- 任何需要手動執行的步驟(調整路徑點、場景變更後重新烘焙等)