这里我想通过直接设置agent的速度来模拟击退效果,结果发现当人物处于静止状态时,agent的速度赋值不上的问题。但是当人物处于移动状态时,却能正常赋值。
解决方法:禁用Auto Braking即可。
public void KickOff()
{
if (!AttackTarget) { return; }
transform.LookAt(AttackTarget.transform);
// 计算击退方向
var kickDirection = (AttackTarget.transform.position - transform.position).normalized;
print("kickDirection"+kickDirection);
print("kickDirection * kickForce"+kickDirection * kickForce);
// 打断移动
AttackTarget.GetComponent<NavMeshAgent>().isStopped = true;
// 击退
AttackTarget.GetComponent<NavMeshAgent>().velocity = kickDirection * kickForce;
print("velocity"+AttackTarget.GetComponent<NavMeshAgent>().velocity+"\n----------------------");
AttackTarget.GetComponent<Animator>().SetTrigger("Dizzy");
}
人物静止时被攻击控制台输出结果如下,前两个都是对的,但是agent的速度却为o。

但是当人物处于移动状态时,却能正常赋值。一开始怀疑是isStopped的问题。但是注释掉或者改为false后还是存在这个问题。然后分析了一通才发现是Auto Braking的锅。
解决方法:禁用Auto Braking即可。
本文介绍了在Unity中遇到的问题,即当角色静止时NavMeshAgent的速度无法赋值。通过深入分析发现是AutoBraking功能的影响。解决方案是禁用AutoBraking以实现对静止角色的击退效果。
3419

被折叠的 条评论
为什么被折叠?



