Мое намерение состоит в том, чтобы найти способ, чтобы первая функция в обновлении была полностью завершена, затем загрузить или активировать остальные.
Вам нужна функция сопрограммы.Функция Update
является функцией void
.Вам нужно будет создать функцию сопрограммы и запустить ее один раз, а затем убедиться, что она не завершается, так что она будет имитировать функцию Update
, которая вызывается в каждом кадре.Это можно сделать, добавив цикл while и получив каждый кадр.
Наконец, превратите функцию StartGameFreezeMovement
из void
в функцию сопрограммы, затем измените if (Time.time < animationDuration)
на while (Time.time < animationDuration)
и получите внутриэто с yield return null;
, так что другие сценарии получат шанс выполнения в ожидании завершения функции StartGameFreezeMovement
.
Ниже приведена фиксированная версия кода из вашего вопроса:
private void Start()
{
//Start once
StartCoroutine(YieldableUpdate());
}
IEnumerator YieldableUpdate()
{
//Call and wait for the StartGameFreezeMovement function to finish
yield return StartGameFreezeMovement();
//Run forever
while (true)
{
StartText();
PlayerMovingForward();
PlayerLeftnRight();
PlayerFalloffGravity();
//Wait a frame so that Unity doesn't freeze
yield return null;
}
}
IEnumerator StartGameFreezeMovement()
{
while (Time.time < animationDuration)
{
PlayerMovingForward();
//Wait a frame so that Unity doesn't freeze
yield return null;
}
}
Если вам нужно несколько раз проверить StartGameFreezeMovement()
ход yield return StartGameFreezeMovement();
внутри цикла while (true)
, в противном случае эта проверка будет выполняться только один раз.