文章

介紹NavMesh與路徑尋找

Unity 的 NavMesh(導航網格)是一個強大的工具,讓你可以為遊戲中的角色實現自動導航和路徑尋找功能。這對於創建智能角色、敵人行為、以及任何需要自動移動的物體都非常有用。下面是對 Unity 的 NavMesh 和路徑尋找功能的詳細介紹:

1. 什麼是 NavMesh

NavMesh(導航網格)是一個基於場景幾何圖形的靜態網格,它定義了角色在場景中可以行走的區域。它是一個包含地形和障礙物的網格,用於計算角色的路徑。

2. 設置 NavMesh

步驟 1:準備場景

  1. 創建地形
    • 在場景中創建一個地形或其他可以作為導航區域的對象。
  2. 添加障礙物
    • 在場景中添加障礙物,如牆壁、障礙物等,這些將被考慮為 NavMesh 的阻擋物。

步驟 2:設置 NavMesh

  1. 打開 Navigation 視窗
    • 在 Unity 的主菜單中,選擇 Window > AI > Navigation 打開 Navigation 視窗。
  2. 設置 Navigation 設置
    • Navigation 視窗中,選擇 Bake(烘焙)標籤。
    • Bake 設置中,你可以調整 Agent Radius(代理半徑)、Agent Height(代理高度)、Agent Step Height(代理步驟高度)和 Max Slope(最大坡度)等參數。
  3. 標記可導航區域
    • Navigation 視窗的 Object 標籤中,選擇需要被包含在 NavMesh 中的對象,並設置其 Navigation Area(導航區域)。通常,地形或地面對象應設置為 Walkable(可行走),而障礙物應設置為 Not Walkable(不可行走)。
  4. 烘焙 NavMesh
    • Navigation 視窗的 Bake 標籤中,點擊 Bake 按鈕,Unity 將計算和生成 NavMesh。

3. 使用 NavMesh 進行路徑尋找

步驟 1:添加 NavMeshAgent

  1. 選擇角色物件
    • Hierarchy 視窗中,選擇你想要進行路徑尋找的角色物件。
  2. 添加 NavMeshAgent 組件
    • Inspector 視窗中,點擊 Add Component,然後添加 NavMeshAgent 組件。
    • NavMeshAgent 是一個用於控制角色在 NavMesh 上移動的組件。
  3. 設置 NavMeshAgent 屬性
    • 調整 NavMeshAgent 的屬性,如 Speed(速度)、Angular Speed(角速度)、Acceleration(加速度)等,根據需要調整角色的運動特性。

步驟 2:編寫路徑尋找腳本

  1. 創建新腳本
    • Assets 資料夾中,右鍵選擇 Create > C# Script,創建一個新的 C# 腳本,命名為 NavMeshController
  2. 編寫腳本代碼
    • 打開 NavMeshController 腳本,添加以下代碼來控制角色的移動:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    using UnityEngine;
    using UnityEngine.AI;
    
    public class NavMeshController : MonoBehaviour
    {
        public Transform target; // 目標位置
        private NavMeshAgent agent;
    
        void Start()
        {
            agent = GetComponent<NavMeshAgent>();
        }
    
        void Update()
        {
            if (target != null)
            {
                agent.SetDestination(target.position); // 設置目標位置
            }
        }
    }
    
  3. 配置腳本
    • Hierarchy 視窗中,選擇你的角色物件,然後在 Inspector 視窗中添加 NavMeshController 腳本。
    • NavMeshController 腳本的 Target 欄位中,拖放你想要角色移動到的目標對象(例如,一個空物件或另一個角色)。

4. 調整和測試

  1. 測試路徑尋找
    • 點擊 Play 按鈕,測試角色是否能夠正確地跟隨目標並在 NavMesh 上移動。
  2. 調整設置
    • 根據需要調整 NavMeshAgent 的屬性和腳本中的參數,以達到最佳的導航效果。

5. 高級功能

步驟 1:避障和動態物體

  1. 處理動態障礙物
    • 對於動態障礙物,你可以使用 NavMeshObstacle 組件來處理。這些障礙物可以移動並影響 NavMesh 的計算。
  2. 使用 NavMesh Surface(可選)
    • 如果你需要更靈活的 NavMesh 設置,可以使用 Unity 的 NavMesh Surface 插件來處理更複雜的場景。

步驟 2:導航區域和標記

  1. 設置不同的導航區域
    • 你可以定義多個導航區域(如 WalkableNot Walkable),並在腳本中根據不同區域設置不同的行為。
  2. 使用 Off-Mesh Links
    • 如果角色需要跨越不可行走的區域(如跳躍或爬升),你可以使用 Off-Mesh Links 來實現。

6. 小結

使用 Unity 的 NavMesh 和路徑尋找功能,你可以輕鬆實現角色的自動導航和智能行為。通過正確設置 NavMesh、調整 NavMeshAgent 組件,以及編寫相關的腳本,你可以為遊戲中的角色創建自然的移動行為,提高遊戲的交互性和智能化水平。

本文章以 CC BY 4.0 授權