1. 程式人生 > >Unity3D中的自動尋路

Unity3D中的自動尋路

Unity3D中自動尋路的功能:

概述:

別人寫的教程,非常詳細,細節我就不贅述了。只寫一些自己的總結:

1. 什麼是導航網格:

“導航網格”,規定了使用自動尋路的GameObject所能或者不能通過的地方。

2. 如何生成導航網格:

選單欄: Window——Navigation,開啟導航網路控制面板。

選擇想要生成網格的遊戲物體,比如一個Plane,在”導航網格控制面板“中將“Navigation Static”打鉤,點選右下角的Bake,烘焙路徑,則可以看到自動生成的區域。Navigation Area則決定了這個區域是Walkable還是not Walkable或者是Jump。

3. 如何應用導航網格:

在自己的Player上新增一個“Nav Mesh Agent”元件,這個元件實現了自動尋路的功能,可以看做是一個封裝。設計者只要使用這個元件就好了,具體可以看官方說明。

舉個例子:

using UnityEngine;
using System.Collections;

public class SetHeroDes : MonoBehaviour
{
    public Transform ds;//用來確定目的地座標的遊戲物體的Transform
    private Vector3 origin;//儲存導航網格代理的初始位置
    private NavMeshAgent nma;//儲存導航網格代理元件

    void Start()
    {
        nma = gameObject.GetComponent<NavMeshAgent>();   //取得導航網格代理元件
        origin = transform.position;     // 儲存一下這個指令碼所掛載遊戲物體的初始位置
        nma.SetDestination(ds.position); // 關鍵點:操作NavMeshAgent元件,設定自動尋路的目標位置為我們通過ds所指定的點。
    	}
}

把這個指令碼掛到想要自動尋路的遊戲物體,並指定目標位置遊戲物體。

簡單粗暴有木有?

nma.SetDestination(ds.position);

這句程式碼設定後,所掛載該指令碼的遊戲物體就開始依據我們通過Bake生成的導航網格自動尋路了。這個過程中,會自動繞過障礙物(通過Bake將這類遊戲物體烘焙為not walked)。

4. OffMeshLink是什麼?

按照我的理解,這個元件提供了不同的高度和導航網格中斷的處理方案,詳情看教程吧。

下面是別人教程的地址,非常詳細:

有些教程裡面的素材如果沒有,通通用cube代替,學到東西才是真的。我看這些教程時,由於是幾經轉載,都看不到圖的,就自己隨便弄個cube,Metrial之類的搞完再說。