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讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值