Я пытаюсь запустить блок кода определенное количество секунд после 2D столкновения. В настоящее время, когда происходит столкновение, он вызывает функцию, которая зацикливается на себе, пока не будет достигнуто определенное время. Время рассчитывается с использованием переменной времени и добавлением Time.deltaTime
каждой итерации.
Это функция
public void springBack(Collider2D collision, float timeCount) {
if (timeCount > springReloadTime * 10) {
Debug.Log("Springing Back!");
timeCount = 0f;
} else {
timeCount = timeCount + Time.deltaTime;
springBack(collision, timeCount);
}
}
Проблема возникает, когда я запускаю это. Все происходит в одном кадре сразу после столкновения, а не через несколько секунд. Если бы я мог вызвать функцию springBack(collision, timeCount);
в следующем кадре, это сработало бы. Когда я посмотрел его, некоторые люди предложили использовать yield return null;
, но, поскольку это не цикл, здесь появляется следующая ошибка:
The body of 'playerMovement.springBack(Collider2D, float)' cannot be an iterator block because 'void' is not an iterator interface type
Есть ли другой способ заставить его работать на следующем кадре? Я мог бы вызвать его из цикла update()
, но я думаю, что у меня может быть несколько запущенных экземпляров этой функции, которые не влияют друг на друга. Если вам нужны значения некоторых открытых переменных (например, springReloadTime
), пожалуйста, спросите.