Запуск функции следующего кадра (не в обновлении ()) Unity - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь запустить блок кода определенное количество секунд после 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), пожалуйста, спросите.

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