Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(196评价)
价格: 4009.00元
Stealth里面 的寻路问题:navmeshAgent和人物出现了分离
小莽发起了问答2019-05-05
7
回复
700
浏览

可以看到navmeshAgent能进行寻路,但是人物不动 

脚本里是用animation来控制的运动,禁用了Nav的控制

navAgent.updatePosition = false;

navAgent.updateRotation = false;

如此一来,就出现了上面的现象,尝试添加了一句nav.nextPosition = transform.position;,能解决上述现象,但是人物只是停留在原地,并没有移动,该怎么 让人物进行寻路呢

EnemyAI:

EnemyAnimation:

所有回复
  • 老师_Trigger 2019-05-05

    同学你好,就是在update里边添加上navmeshagent.nextPosition = transform.position就可以了,老师这边测试是没有问题的,可以看下,是2018.3版本的,但是代码跟工程实现是一样的:

    链接:https://pan.baidu.com/s/1cF2f6n5yWx-L7u0zxAluDA
    提取码:85oy

     

    • 小莽 2019-05-06

      经过多方查找 ,发现居然是我的混合树设置的速度和转向速度反了.我晕....谢谢老师,麻烦老师了

      (0) 回复
    • 坚持努力. 2022-11-20

      UNITY4.6 原版的工程,跟 老师的2018版 对比发现还是不一样的,原版的 追击更快,寻路更好。把角角色生命值调大,怪追到主角,射击。到这里新旧版都一样。 角色逃走,怪还能回去继续巡逻。(新版就一直呆在原地,不会回去巡逻了)然后角色 再次触发警报,怪还能继续过来追人。但是2018版的怪就直接不动了。 用新本的unity 加了 navmeshagent.nextPosition = transform.position 感觉导航没以前老版的好。

      (0) 回复
    还有-3条回复,点击查看
    你还没有登录,请先登录注册
  • 吃牛的草 2022-09-14

    为啥加了Rigidbody后,机器人就跑不动了。移除后就能跑,但会穿墙,而且不会被门的触发器检测到。

    • 吃牛的草 2022-09-15

      探索很久后发现,可以加个Character Controller防止穿墙,又能被自动门触发器检测到。就不知道会不会有副作用

      (0) 回复
    还有-4条回复,点击查看
    你还没有登录,请先登录注册
  • 吃牛的草 2022-09-14
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.AI;
    
    public class Guard : MonoBehaviour
    {
        public GameObject[] patrolPath;  //巡逻路径
        private NavMeshAgent agent;
        private Animator anim;
        private int targetDex = 0;
    
        // Start is called before the first frame update
        void Start()
        {
            agent = GetComponent<NavMeshAgent>();
            anim = GetComponent<Animator>();
            agent.updatePosition = false;
            agent.updateRotation = false;
        }
        // Update is called once per frame
        void Update()
        {
            GameObject targetObj = patrolPath[targetDex];
            if (targetObj != null && MoveTo(targetObj.transform.position))
            {
                targetDex++;
                targetDex %= patrolPath.Length;
            }
            if (targetObj == null)
                anim.SetFloat("speedZ", 0f, 0.3f, Time.deltaTime); 
        }
    
        bool MoveTo(Vector3 targetPos)
        {
            agent.destination = targetPos;
            if (!agent.pathPending && agent.remainingDistance < agent.radius + 0.2)
            {
                return true;
            }
            Vector3 nextPos = agent.nextPosition;
            nextPos.y = transform.position.y;
            Vector3 P = nextPos - transform.position;
            float signAngle = Vector3.SignedAngle(P, transform.forward, Vector3.up);
            float angleAbs = Mathf.Abs(signAngle);
            if (signAngle > 0) 
                transform.Rotate(new Vector3(0, -Time.deltaTime * 120, 0));//turn right
            else
                transform.Rotate(new Vector3(0, Time.deltaTime * 120, 0));   //turn left
       
            if (angleAbs < 90)
                anim.SetFloat("speedZ", 1.5f * Mathf.Cos(angleAbs), 2f, Time.deltaTime);
            else
                anim.SetFloat("speedZ", 0.6f, 0.2f, Time.deltaTime);
    
            if (P.magnitude > agent.radius)
                agent.nextPosition = (agent.nextPosition - 0.1f * P);
        
            return false;
        }
    
    }

    机器人导航,加进Rigidbody后,动画怎么会跑不动的

    • 吃牛的草 2022-09-15

      探索很久后发现,可以加个Character Controller防止穿墙,又能被自动门触发器检测到。就不知道会不会有副作用

      (0) 回复
    还有-4条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!