UnityNavgation解决AI寻路穿过玩家角色的问题

Unity使用导航 生成网格之后,用NavMeshAgent控制AI追逐玩家,因为玩家控制的角色处于网格范围之内,在AI移动的过程中玩家可以无视碰撞穿过AI。

    这个问题有很多解决方法,比如禁用掉NavMeshAgent的控制,只提供运动的方向和速度,改用脚本控制AI的移动。也可一用插件动态烘培网格。但是就是想偷懒嘛,所以用了个简单的方法解决的此问题。

    因为发现拥有NavMeshAgent的游戏物体是会互相计算碰撞的,所以在玩家身上添加个NavMeshAgent就能解决此问题:

以下代码是AI的寻路方法,在距离玩家3米的时候停下来攻击,大于3米时追逐。另外要判断一下AI是否在OffMeshLink的状态,总不能让AI在空中突然停住吧~~

    private void Move()
    {
        Target = GameObject.Find("Player").transform.position;
        if ((transform.position - target).magnitude <= 3 && !nav.isOnOffMeshLink)
        {
            if (!nav.isStopped)
                nav.isStopped = true;
            Attack();
        }
        else
        {
            if (nav.isStopped)
                nav.isStopped = false;
            nav.SetDestination(target);
        }
    }

以下代码是玩家的脚本,我做的是FPS游戏,玩家移动有自己的脚本控制,所以在游戏开始时需要禁用NavMeshAgent的更新:

NavMeshAgent nav;
private void Start ()
{
    nav = GetComponent<NavMeshAgent>();
    nav.updatePosition = false;
    nav.updateRotation = false;
}

目前不知道这样做有没有什么问题,如有更好的办法,还请各位大佬指点。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值