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

(61评价)
价格: 2155.00元
[秘密行动]做出来的AI运动不正确
cuiyuguang0001发起了问答2018-03-18
2
回复
509
浏览
    public Transform[] wayPoint;
    public float moveWaitTimer = 3;
    public float chaseTime = 3;

    private int index = 0;
    private float moveTimer = 0;
    private float chaseWaitTime = 0;
    private NavMeshAgent navAgent;
    private EnemySight sight;
    public void patrol()//巡逻
    {
        navAgent.speed = 3;
        navAgent.updatePosition = false;
        navAgent.updateRotation = false;
        if (navAgent.remainingDistance < 0.5f)
        {
            navAgent.isStopped = true;
            moveTimer += Time.deltaTime;
            if (moveTimer > moveWaitTimer)
            {
                index++;
                index = index % wayPoint.Length;
                navAgent.destination = wayPoint[index].position;
                navAgent.isStopped = false;
                navAgent.updatePosition = false;
                navAgent.updateRotation = false;
                moveTimer = 0;
            }
        }
    }

//下面是动画播放代码:
    public float SpeedDampTime;
    public float AngleDampTime;

    private NavMeshAgent navAgent;
    private Animator anim;
void Update()
{
   if (navAgent.desiredVelocity == Vector3.zero)
   {
                  anim.SetFloat("Speed",0,SpeedDampTime,Time.deltaTime);
            anim.SetFloat("AnglierSpeed",0,AngleDampTime,Time.deltaTime);
   }
   else
   {
    float angle =Vector3.Angle(transform.forward,navAgent.desiredVelocity);
    float angleRad = 0;
    if (angle > 90)
     {
       anim.SetFloat("Speed", 0,SpeedDampTime,Time.deltaTime);
     }
     else
     {
      Vector3 projection =Vector3.Project(navAgent.desiredVelocity, transform.forward);
      anim.SetFloat("Speed",projection.magnitude,SpeedDampTime,Time.deltaTime);
     }
     angleRad = Mathf.Deg2Rad;
     Vector3 crossRes = Vector3.Cross(transform.forward,navAgent.desiredVelocity);
     if (crossRes.y < 0)
       {
           angleRad = -angleRad;
       }
       anim.SetFloat("AnglierSpeed",angleRad,AngleDampTime,Time.deltaTime);
            
        }
    }

具体原因我也找不太清,代码和老师的一样。但是这个机器人动作却不按Nav Mesh Agent里面所定的点走,视频里用的是4.6版本,我是2017 1.1p4版本,我怀疑是版本不一样导致的动画播放的不一样,因为有的视频里的方法弃用了,我另写的方法改的代码

这个机器人一直在原地往前蹭,nav所定的点和他方向一样时他才会走,而且走得慢,走的不远就停了,这个问题卡了我好久了,代码发的太多了可能老师看着费劲,我q651826284,如果老师有时间帮我解决一下就太感谢了!

所有回复
  • siki 2018-03-18

    在运动的时候 ,使用navmeshagent.nextPosition=transform.position; 让模拟位置保持跟自身位置一致,这样才可以正确的寻路,这个是新版本的变化

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