Я наконец нашел решение.
Я опубликую это на всякий случай, если кому-то еще это понадобится в будущем.
Я рассчитываю текущее вращение на основе движения.
private void SetRotation() {
currentRotation = Quaternion.LookRotation(movement);
}
Затем я создал второй кватернион для хранения последнего вращения, если оно не совпадает с текущим. Я также использую счетчик для хранения времени, в течение которого произошел поворот, до остановки движения или изменения направления.
private void CheckSameRotation() {
if (lastRotation != currentRotation || movement == Vector3.zero) {
sameRotationTime = 0;
lastRotation = currentRotation;
}
else {
sameRotationTime += Time.deltaTime;
}
}
Затем я использовал bool, чтобы проверить, достаточно ли времени, чтобы произошло вращение.
private void TimeAtSameRotation() {
canRotate = (sameRotationTime < 0.015f) ? false : true;
}
И затем я, наконец, поворачиваю объект, если движение не равно нулю и условие «canRotate» выполняется.
private void Rotate() {
if (movement != Vector3.zero && canRotate) {
transform.rotation = currentRotation;
}
}