Как сделать задержку в c unity
Перейти к содержимому

Как сделать задержку в c unity

Как заставить скрипт ждать / спать простым способом в Unity

Как я могу поместить функцию сна между TextUI.text = . , чтобы ждать 3 секунды между каждой фразой?

Я уже пробовал разные вещи, но ни один из них не работал, например:

В bash это будет:

Но я не могу понять, как это сделать в Unity с C #

5 ответов

В Unity есть много способов подождать. Это действительно просто, но я думаю, что стоит рассказать о большинстве способов сделать это:

1 . С помощью сопрограммы и WaitForSeconds .

Это, безусловно, самый простой способ. Поместите весь код, который вам нужно подождать некоторое время, в функцию сопрограммы, а затем вы можете подождать с помощью WaitForSeconds . Обратите внимание, что в функции сопрограммы вы вызываете функцию с помощью StartCoroutine(yourFunction) .

В приведенном ниже примере выполняется поворот на 90 градусов, ожидание 4 секунды, поворот на 40 градусов и ожидание 2 секунды, а затем, наконец, поворот на 20 градусов.

2 . При помощи сопрограммы и WaitForSecondsRealtime .

Единственная разница между WaitForSeconds и WaitForSecondsRealtime заключается в том, что WaitForSecondsRealtime использует немасштабированное время для ожидания, что означает, что при приостановке игры с помощью Time.timeScale функция WaitForSecondsRealtime будет не пострадает, но WaitForSeconds будет.

Подождите и по-прежнему смотрите, сколько вы ждали:

3 . С помощью сопрограммы и увеличения переменной в каждом кадре с помощью Time.deltaTime .

Хороший пример этого — когда вам нужно, чтобы таймер отображал на экране, сколько времени он ждал. В основном как таймер.

Также хорошо, если вы хотите прервать ожидание / сон с помощью переменной boolean , когда она истинна. Здесь можно использовать yield break; .

Вы все еще можете упростить это, переместив цикл while в другую функцию сопрограммы и выдав его, а также по-прежнему иметь возможность видеть, как он подсчитывает, и даже прерывать счетчик.

Подождите / спите, пока переменная не изменится или не станет равной другому значению :

4 . С сопрограммой и WaitUntil функция:

Подождите, пока условие не станет true . Примером является функция, которая ожидает, пока счет игрока не станет 100 , а затем загружает следующий уровень.

5 . С сопрограммой и WaitWhile функция.

Подождите, пока выполняется условие true . Например, вы хотите выйти из приложения при нажатии клавиши выхода.

6 . С помощью функции Invoke . :

Вы можете позвонить, чтобы Unity вызывала функцию в будущем. Когда вы вызываете функцию Invoke , вы можете передать время ожидания перед вызовом этой функции ее второму параметру. В приведенном ниже примере функция feedDog() вызывается через 5 секунд, когда вызывается Invoke .

7 . С функцией Update() и <>.

Это похоже на # 3 , за исключением того, что в нем не используются сопрограммы. Он использует функцию Update .

Проблема в том, что для этого требуется так много переменных, чтобы он запускался не каждый раз, а только один раз, когда таймер закончился после ожидания.

В Unity есть и другие способы подождать, но вы обязательно должны знать упомянутые выше, так как они упрощают создание игр в Unity. Когда использовать каждый из них, зависит от обстоятельств.

Для вашей конкретной проблемы это решение:

А чтобы вызвать / запустить функцию сопрограммы из функции start или Update, вы вызываете ее с помощью

Unity Android — гайды для начинающих

Таймер в Unity 3D очень часто бывает нужен для совершения каких-либо периодических действий, таких как показ рекламы. Для его реализации мы будем использовать IEnumerator. Итак, давайте создадим его:

yield return new WaitForSeconds(100);

Этот IEnumerator возвращает ожидание 100 секунд, после чего показывает пользователю рекламу (как пример я указал функцию show_ad()). Для того, чтобы запустить данный IEnumerator, в Unity есть команда:

Готово! После запуска программа подождет 100 секунд, после чего выполнит функцию показа рекламы. Если нам необходимо, чтобы такое действие происходило каждые 100 секунд, обернем код внутри IEnumerator’а в цикл while(true):

yield return new WaitForSeconds(100);

Теперь функция вызывается каждые 100 секунд.

Также нужно отметить, что при команде StartCoroutine() весь код после будет также выполняться, так как IEnumerator не блокирует поток, выполняющий основной код.

WaitForSeconds

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Description

Suspends the coroutine execution for the given amount of seconds using scaled time.

The real time suspended is equal to the given time divided by Time.timeScale. See WaitForSecondsRealtime if you wish to wait using unscaled time. WaitForSeconds can only be used with a yield statement in coroutines.

There are some factors which can mean the actual amount of time waited does not precisely match the amount of time specified:
1. Start waiting at the end of the current frame. If you start WaitForSeconds with duration ‘t’ in a long frame (for example, one which has a long operation which blocks the main thread such as some synchronous loading), the coroutine will return ‘t’ seconds after the end of the frame, not ‘t’ seconds after it was called.
2. Allow the coroutine to resume on the first frame after ‘t’ seconds has passed, not exactly after ‘t’ seconds has passed.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *