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

(197评价)
价格: 4431.00元
stealth敌人巡逻问题,机器人在第一个到第二点是正常的,但是在第二个点到第三个点,自走了一半路程就停下来了,是什么原因
vigo发起了问答2018-07-15
2
回复
1162
浏览
using UnityEngine;
using System.Collections;

public class EnemyAnimation : MonoBehaviour
{
    public float speedDampTime = 0.3f;
    public float anglarSpeedDampTime = 0.3f;
    private NavMeshAgent navAgent;
    private Animator anim;

    void Awake()
    {
        navAgent = this.GetComponent<NavMeshAgent>();
        anim = this.GetComponent<Animator>();
    }
    void Update()
    {
        if (navAgent.desiredVelocity == Vector3.zero)  
        {
            anim.SetFloat("Speed", 0, speedDampTime, Time.deltaTime);
            anim.SetFloat("AnglarSpeed", 0, anglarSpeedDampTime, Time.deltaTime);
            print("test");
        }
        else
        {
            float angle = Vector3.Angle(transform.forward, navAgent.desiredVelocity);  
            float angleRad = 0f;
            if (angle > 90)// 大于90度就进行旋转,小于90才走
            {
                anim.SetFloat("Speed", 0, speedDampTime, Time.deltaTime);
            }
            else
            {
                Vector3 progection = Vector3.Project(navAgent.desiredVelocity, transform.forward);
                anim.SetFloat("Speed", progection.magnitude, speedDampTime, Time.deltaTime);
            }
            angleRad = angle * Mathf.Deg2Rad; 
            Vector3 corssRes = Vector3.Cross(transform.forward, navAgent.desiredVelocity);
            if (corssRes.y < 0)
            {
                angleRad = -angleRad;
            }
            anim.SetFloat("AnglarSpeed", angleRad, anglarSpeedDampTime, Time.deltaTime);
        }
    }
}

如上代码,在untiy中也是没有报错的,机器人实际上就在第二点走不到第三个点,但是NavMeshAgent却正常,这时什么原因?

 

所有回复
  • vigo 2018-07-15

    百度下,原来是新版本的问题,在update最后补上  navAgent.nextPosition = transform.position;这句代码,将NavMeshAgent和机器人位置同步就好了。

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2018-07-17

    这个是版本的问题,新版本有一个灵魂,导航是按照灵魂来导航的,需要让灵魂跟自身保持一致

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