Unity功能點---NavMesh的爬牆(OffMeshLink)和路障(NavMesh Obstacle)

記錄一下自己的理解

好久沒有使用NavMesh尋路系統了,回憶記錄一下,主要是爬牆功能和路障功能:

爬牆功能需要在牆體添加OffMeshLing組件,然後設置爬牆的起始點,在牆上的運動點,從牆上下來的點,一個牆上可以添加多個OffMeshLing組件,以便將所有的點都連接起來:

烘焙的參數設置就不多說了,這裏主要是在Cube(牆)上添加了三個OffMeshLing組件將四個點進行連接,其中1點和2點連接成一個上牆跳躍點,2點和3點連接成一個在牆上的行走點,3點和4點形成一個下牆的跳躍點,進行烘焙就可以了。

然後我們給Player添加 Navmesh Obstacle組件,避免不同物體的終點一樣時導致達到後出現排擠的問題

勾選Carve,這樣當組件生效時後自動創造出一個不可行動的區域。需要注意的是NavMeshAgent和NavMeshObstacle不能同時存在,我們需要在Agent完成後關閉Agent,然後開啓Obstacle。

下面是控制腳本:

using UnityEngine;
using UnityEngine.AI;
public class NavTest : MonoBehaviour {

    public NavMeshAgent agent;//自身尋路代理
    public Transform Des;//尋路終點
    public GameObject Player2;//Player上賦值Player2,Player2不賦值
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            agent.SetDestination(Des.position); //開始尋路        
        }    
        if (Vector3.Distance(transform.position, Des.position)<= 0.3f)//與終點距離小於0.3f就認爲達到終點
        {
            agent.enabled = false;//關閉自身的尋路代理
            if (Player2 != null)//判斷當前是第一個玩家
            {
                transform.GetComponent<NavMeshObstacle>().enabled = true;//開啓自身路障
                Player2.SetActive(true);//第二個玩家出現
                this.enabled = false;//關閉自身腳本
            }
           
        }
    }
}

腳本掛在在Player和Player2上面,代碼註釋很清楚。直接看運行效果:

 

歡迎加羣:4364930討論。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章