使用 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
。
我正在使用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
。