記錄一下自己的理解
好久沒有使用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討論。