Я изучаю, как использовать функцию Unityscript WaitForSeconds, и раньше у нее был успех. Но теперь я пытаюсь использовать его в сценарии, который, как предполагается, когда здоровье объекта достигнет 0, переместите объект (окно в этом случае) за кадром, а затем через определенное количество секунд он снова появится в случайном положении на экране, и установите для здоровья значение по умолчанию. До сих пор я знаю:Проблемы с WaitForSeconds
function Update()
{
if(health <= 0)
{
RespawnWaitTime();
var position = Vector3(Random.Range(-6,6),Random.Range(-4.5,4.5),0); //this is the onscreen range
transform.position = position;
health = 2;
}
}
function RespawnWaitTime()
{
var offScreen = Vector3(10,10,0);
transform.position = offScreen;
yield WaitForSeconds(2);
}
Однако, это не дотягивает до 2 секунд. Коробка просто переходит на новое место, как будто функции там не было. Я считаю, что он идет в офшорную позицию, но просто прыгает прямо назад, не дожидаясь. Я проверил, чтобы увидеть, если это применение ждать вообще, изменив некоторые из кода:
function RespawnWaitTime()
{
var offScreen = Vector3(10,10,0);
transform.position = offScreen;
print("I'm over here!");
yield WaitForSeconds(2);
print("I'm coming back!");
}
Первый бит текста заканчивается печать сразу, то через две секунды, появится второй бит текста а также, как и ожидалось. Так почему же ожидания не относятся к коробке? Спасибо за вашу помощь.
Я не знаю единственного слова, но позвольте мне угадать: 'WaitForSeconds' принимает обратный вызов, который вызывается после указанного таймаута. Вот как ведет себя 'setTimeout' в Javascript. –