1. 程式人生 > >Unity3D-NavMesh導航網格尋路

Unity3D-NavMesh導航網格尋路

NavMesh(導航網格)是3D遊戲世界中用於動態物體實現自動尋路的技術。

NavMesh系統是人工智慧的一種,它使用一個新增在遊戲物件上或者作為遊戲物件父物體的名為“導航網格代理”(NavMeshAgent)的元件來控制該遊戲物件尋找能夠通過的路徑,並最終到達目的地。

自動尋路還可以實現繞過障礙、爬上與跳下障礙物、按類別尋找屬於自己的道路、動態設定道路中的障礙等技術。

下面用一個簡單的Demo來介紹NavMesh的應用:

1.在Scene場景中新增Cube設定場景,如圖所示:


2.選擇除了主角、目標以及攝像機、直線光以外的所有物體,在Inspector視窗的右上角勾選Static,成為靜態物體,並設定成Navigation Static靜態型別。


3.在主視窗中選擇[Window]→[Navigation],開啟Navigation視窗。該視窗用於生成路徑尋找所需要的導航網格結構,代理將根據該導航網格進行尋路計算。確保勾選了“Navigation Static”。點選Bake進行烘培。



4.選擇需要尋路的遊戲物件,為它新增一個NavMeshAgent元件。


5.編寫尋路程式碼,新建一個指令碼:

//尋路網格導航
using UnityEngine;
using System.Collections;

public class DemoNavigation : MonoBehaviour
{
    private NavMeshAgent agent;         //導航代理
    public Transform TransHero;

    // Use this for initialization
    void Start()
    {
        agent = this.GetComponent<NavMeshAgent>();
        if (agent && TransHero)
        {
            agent.SetDestination(TransHero.transform.position);
        }
    }
}
執行結果:
這樣就實現了NavMesh導航網格尋路。