记录一下自己的理解
好久没有使用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讨论。