使用 Slerp 的奇怪行为

Strange behaviour using Slerp

我正在使用Quaternion.Slerp在转弯时旋转汽车。我注意到在左转之前,汽车会在向左转弯之前稍微向右转。我也正在将汽车从一个位置移动到另一个位置。知道为什么会发生这种情况以及如何阻止它吗?

car.transform.position = Vector3.Lerp(car.transform.position, nextPosition, fracJourney);

if (direction != Vector3.zero)
{
    Quaternion lookRotation = Quaternion.LookRotation(direction);
    car.transform.rotation = Quaternion.Slerp(car.transform.rotation, lookRotation, Time.deltaTime * rotationSpeed);
}

Quaternion.Slerp 使用插值和最短路径。它不适用于大角度。并且恰好在 180 度处是未定义的。围绕那个角度,你会从帧到帧得到一些东西 "jerky"。

两个选项:

Tween 你的动画。也就是说,有效地旋转较小的角度,直到达到最终角度。考虑关键帧或将一次旋转分成更小的块。

或者您仍然可以在欧拉角中进行插值 space。然后在插值后使用Quaternion.Euler