【发布时间】:2016-03-08 07:58:48
【问题描述】:
我正试图让 NPC 在我与主角交谈时看着他。我需要确保它看起来很自然并且他面对着我。我知道我可以做 Transform.LookAt() 但这太即时和不自然。
当我的角色停止移动时,我如何旋转 navmeshagent 以面对我的角色?
【问题讨论】:
标签: unity3d path-finding navmesh
我正试图让 NPC 在我与主角交谈时看着他。我需要确保它看起来很自然并且他面对着我。我知道我可以做 Transform.LookAt() 但这太即时和不自然。
当我的角色停止移动时,我如何旋转 navmeshagent 以面对我的角色?
【问题讨论】:
标签: unity3d path-finding navmesh
试试这个来控制身体方向 - slerp 可以调节到你想要的旋转速度 (https://docs.unity3d.com/ScriptReference/Quaternion.Slerp.html):
private void FaceTarget(Vector3 destination)
{
Vector3 lookPos = destination - transform.position;
lookPos.y = 0;
Quaternion rotation = Quaternion.LookRotation(lookPos);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, [fill in desired rotation speed]);
}
【讨论】:
if(agent.remainingDistance < agent.stoppingDistance)
{
agent.updateRotation = false;
//insert your rotation code here
}
else {
agent.updateRotation = true;
}
当您的代理距离低于 stopDistance 变量时,这将旋转您的代理。但是它看起来很不人道,所以如果您要使用人形 AI,我建议您查看 unity Mecanim demo(尤其是运动场景),因为它具有可以正确为代理设置动画的代码和动画。
【讨论】:
也许试试这个Head Look Controller。它非常流畅,并与动画融为一体!
【讨论】:
LookAt() 与Lerp 结合使用。不过,请确保将其置于更新循环中。
将字符放入游戏对象并将导航网格从字符复制到父对象,取消选中启用字符。也向上移动任何脚本。 花了 5 个小时才找到这个。
【讨论】: