Quaternion Lerp не дает хороших результатов с LookRotation - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь плавно перевернуть моего персонажа от первого лица, одновременно поворачивая игрока по оси Y, используя взгляд мыши.Проблема в том, что lerp не заканчивается точным результатом.Я хочу, чтобы конечный результат вращения был таким точным, чтобы (transform.up == TargetUpDirection ())

void FixOrientation() {
    if(transform.up != TargetUpDirection()) //Vector3(0, -1, 0)
    {
        transform.rotation = 
            Quaternion.Lerp(transform.rotation,
                            Quaternion.LookRotation(transform.forward,
                            TargetUpDirection(), 0.1f);
    }
}

, если я использую взгляд мыши, когда он переворачивается, transform.up.y всегда приводит к результату меньше 1как например 0.99881231, и мне нужно продолжать использовать внешний вид мыши, пока он не исправит себя, и мне это не нравится.

Причина, вероятно, в том, что когда я использую внешний вид мыши, персонаж вперед изменяется, что вызывает этоно я не знаю, как реализовать решение, потому что кватернионы меня смущают.

1 Ответ

0 голосов
/ 18 октября 2018

Потому что, как написано, Lerp всегда вращает вас на 10% от оставшегося пути.Это означает, что по мере приближения к целевому повороту величина, на которую вы поворачиваетесь, будет уменьшаться.В конце концов, он уменьшится до точки, в которой ошибки округления заставят вас повернуть на 0 градусов, прежде чем вы на самом деле достигнете места назначения.

В большинстве случаев вы не хотите вызывать Lerp с постоянным значением дляt.

Вот альтернатива.Сначала выберите максимальную скорость вращения:

float smooth = 5f;

Затем используйте Quaternion.RotateTowards:

Quaternion targetRotation = Quaternion.LookRotation(transform.forward, TargetUpDirection());
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation , smooth * Time.deltaTime);

Этот ответ основан на этом посте на форумах Unity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...