代码之家  ›  专栏  ›  技术社区  ›  rafvasq

使用slerps的奇怪行为

  •  0
  • rafvasq  · 技术社区  · 7 年前

    我在用 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 回复  |  直到 7 年前
        1
  •  0
  •   Zer0    7 年前

    Quaternion.Slerp 使用插值和最短路径。它在大角度下工作不好。实际上在180度时没有定义。从这个角度看,你会看到一帧一帧的“不稳定”。

    两种选择:

    Tween 你的动画。也就是说,有效地,以较小的角度向上旋转,直到达到最终的角度。想想关键帧或者把一个旋转分成更小的块。

    也可以在Euler角度空间中进行插值。然后使用 Quaternion.Euler 插值之后。