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,如果老师有时间帮我解决一下就太感谢了!