使用Slerp的行为异常

时间:2018-06-27 01:19:04

标签: c# unity3d quaternions

我在转弯时使用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);
}

1 个答案:

答案 0 :(得分:0)

Quaternion.Slerp使用插值和最短路径。大角度时效果不佳。并且在确切的180度范围内实际上是未定义的。围绕该角度,您会在帧与帧之间得到一些“生涩”的东西。

两个选项:

Tween您的动画。也就是说,有效地以较小的角度向上旋转,直到达到最终角度为止。想想关键帧或将旋转旋转分成较小的块。

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