Ну, проблема в том, что как только вы запускаете вращение, вам понадобится 30 секунд, чтобы завершить ваш coroutine
из-за вашего цикла while. А также, когда вы запускаете его снова, вы запускаете еще один coroutine
, это будет продолжаться вечно, как это. Я предполагаю, что rotateAntiClockwise
метод вызывается при каждом нажатии вашего триггера.
Я также предполагаю, что вы хотите повернуть объект на 90 градусов по оси Y, вы можете добиться этого следующим образом:
bool isRunning = false;
//Make sure this variable is true when triggered and false when not
bool isTrigger = false;
float rotationAmount = 0.3f;
public IEnumerator SlowSpin2()
{
isRunning = true;
//This will rotate the object continuously until isTriggered is false
while (isTriggered)
{
Debug.Log("Rotating");
transform.Rotate(new Vector3(0, -rotationAmount, 0));
yield return null;
}
Debug.Log(Time.time);
isRunning = false;
}
Этот скрипт будет медленно вращать ваш объект от 0 до 90 в течение 2 секунд.
Затем вам нужно изменить rotateAntiClockwise
следующим образом, чтобы вы не запускали другую сопрограмму, пока она уже запущена.
public void rotateAntiClockwise()
{
if(!isRunning)
StartCoroutine(SlowSpin2());
}