Странное поведение с использованием Slerp - PullRequest
0 голосов
/ 27 июня 2018

Я использую 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 голосов
/ 27 июня 2018

Quaternion.Slerp использует интерполяцию и кратчайший путь. Он плохо работает с большими углами. И буквально не определено ровно на 180 градусов. Вокруг этого угла вы получите что-то «дерганное» от кадра к кадру.

Два варианта:

Твин Ваша анимация. То есть, фактически, вращение на меньшие углы вверх, пока вы не достигнете конечного угла. Подумайте о ключевых кадрах или разбивке одного поворота на более мелкие куски.

Или вы можете выполнить интерполяцию, находясь в пространстве углов Эйлера. А затем используйте Quaternion.Euler после интерполяции.

...