Все вращение в цикле 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
, чтобы отразить вращение.
См. "ОБРАТНОЕ ВРАЩЕНИЕ УГЛОВОГО ВРАЩЕНИЯ ЗА ВРЕМЯ:" раздел от этой записи.