我希望我的对象旋转向相机在同一时间,当我旋转相机,使玩家在行走时总是在相机的方向,在典型的第三人称游戏.不幸的是,任何方法,到目前为止,导致我的对象的旋转,略微落后,相机的旋转.我一直在寻找一个解决方案,一个星期,我绝望了.我发布的视频,我有一个对象的旋转。
private Rigidbody rb;
public float speed = 1.0f;
void Start()
{
rb = GetComponent<Rigidbody>();
}
direction = Camera.main.transform.forward;
direction.y = 0.00f;
private void FixedUpdate ()
{
Quaternion targetRotation = Quaternion.LookRotation(direction);
Quaternion newRotation = Quaternion.Lerp(rb.transform.rotation, targetRotation, speed * Time.fixedDeltaTime);
rb.MoveRotation(newRotation);
}
}
这是一个不恰当的使用 Quaternion.Lerp
因为你并没有用一个比例来计算要移动的距离。目前,你基本上是在告诉它只旋转一小部分到目标旋转的方式。
你应该使用 Quaternion.RotateTowards
因为你可以很容易地计算出基于角旋转的 deltaTime
(或: fixedDeltaTime
如你使用)。)
public float speed = 30f; // max rotation speed of 30 degrees per second
// ...
Quaternion newRotation = Quaternion.RotateTowards(rb.transform.rotation, targetRotation,
speed * Time.deltaTime);
rb.MoveRotation(newRotation);
在重新阅读了你的问题之后,现在看来你并不想要一个平滑的过渡lerp。在这种情况下,只需将旋转设置为目标旋转。
rb.MoveRotation(targetRotation);
如果这样的插值太多,不够直接的话 你可以将刚体的旋转设置为目标旋转 Update
:
private void Update ()
{
rb.rotation = Quaternion.LookRotation(direction);
}
我想你不需要这些代码。你只需将摄像机作为你的角色在层次结构中的子变换,并将其对齐,使其在你的角色上方和后方。当他移动时,摄像机应该会自动跟随。