Quaternion.Slerp почему-то не плавно вращается - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь заставить качаться, как объект, вращаться с помощью Unity, и по какой-то причине вращение происходит мгновенно, а не постепенное движение. Я изучал Slerp и Lerp ранее и не могу заставить его работать ни с одним из них. Мне было интересно, есть ли у кого-нибудь понимание, потому что я уверен, что упускаю что-то глупое и легкое xD. Спасибо! Вот метод.

private void Rotate(float rotateAmount)
    {
        var oldRotation = transform.rotation;
        transform.Rotate(0, 0, rotateAmount);
        var newRotation = transform.rotation;
 
        for (float t = 0; t <= 1.0; t += Time.deltaTime)
        {
            transform.rotation = Quaternion.Slerp(oldRotation, newRotation, t);
        }
        transform.rotation = newRotation;
    }
}

1 Ответ

0 голосов
/ 01 ноября 2018

Все вращение в цикле for происходит в кадре one . Вы не можете видеть их изменения под одним кадром. Сделайте функцию Rotate функцией сопрограммы, затем дождитесь кадра в каждом цикле с помощью yield return null, и вы должны увидеть изменения во времени.

private IEnumerator Rotate(float rotateAmount)
{
    var oldRotation = transform.rotation;
    transform.Rotate(0, 0, rotateAmount);
    var newRotation = transform.rotation;

    for (float t = 0; t <= 1.0; t += Time.deltaTime)
    {
        transform.rotation = Quaternion.Slerp(oldRotation, newRotation, t);
        yield return null;
    }
    transform.rotation = newRotation;
}

Поскольку это функция сопрограммы, вы запускаете ее, а не вызываете ее напрямую:

StartCoroutine(Rotate(90f));

Я заметил, что вы использовали transform.Rotate(0, 0, rotateAmount), чтобы получить угол назначения. Вам не нужно это делать. Если вам нужно повернуть объект на другой угол от текущего угла, получите текущий угол, затем добавьте его к целевому углу и используйте Vector3.Lerp, чтобы отразить вращение.

См. "ОБРАТНОЕ ВРАЩЕНИЕ УГЛОВОГО ВРАЩЕНИЯ ЗА ВРЕМЯ:" раздел от этой записи.

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