Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Пакетный режим и встроенная совместимость с сопрограммами

На этой странице описываются поддерживаемые функции при запуске редактора Unity и автономного проигрывателя в пакетном режиме.

При запуске Unity следующие встроенные операторы coroutine добавляют функциональность:

В следующей таблице показано, какие из этих операторов Unity поддерживает в редакторе и автономном проигрывателе, а также при запуске каждого из них в пакетном режиме с использованием аргумента командной строки -batchmode :

Редактор Редактор – пакетный режим Отдельный проигрыватель Unity Отдельный проигрыватель Unity — пакетный режим
AsyncOperation Yes Yes Yes Yes
WaitForEndOfFrame Yes No* Yes Yes
WaitForFixedUpdate Yes Yes Yes Yes
WaitForSeconds Yes Yes Yes Yes
WaitForSecondsRealtime Yes Yes Yes Yes
WaitUntil Yes Yes Yes Yes
WaitWhile Yes Yes Yes Yes

* Вы не можете использовать WaitForEndOfFrame при запуске редактора с -batchmode, поскольку такие системы, как анимация, физика и временная шкала, могут не работать. корректно работать в редакторе. Это связано с тем, что Unity в настоящее время не обновляет эти системы при использовании WaitForEndOfFrame.

Запуск сопрограмм

В редакторе

В редакторе нажмите кнопку "Воспроизвести", чтобы запустить код с сопрограммами.

Редактор в пакетном режиме

Чтобы запустить сопрограммы при запуске редактора в пакетном режиме из командной строки, введите:

C:\Program Files\Unity\Editor\Unity.exe -projectPath PROJECT_PATH -batchMode

Внутри автономного проигрывателя

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

Автономный проигрыватель в пакетном режиме

Чтобы запустить сопрограммы при запуске проигрывателя в пакетном режиме из командной строки, введите:

PATH_TO_STANDALONE_BUILD -projectPath PROJECT_PATH -batchMode

Например, в Windows:

C:\projects\myproject\builds\myproject.exe -batchMode

На Mac:

~/UnityProjects/myproject/builds/myproject -batchMode

Примеры сценариев сопрограмм

Асинхронная операция

using System.Collections; using UnityEngine; [ExecuteInEditMode] public class ExampleClass : MonoBehaviour { public void Start() { StartCoroutine(Example_AsyncTests()); } public IEnumerator Example_AsyncTests() { Debug.Log("Start of AsyncLoad Example"); var load = UnityEngine.Resources.LoadAsync(""); yield return load; yield return null; Debug.Log("End of AsyncLoad Example"); } }

WaitForEndOfFrame

using System.Collections; using UnityEngine; [ExecuteInEditMode] public class ExampleClass : MonoBehaviour { public void Start() { StartCoroutine(Example_WaitForEndOfFrame_Coroutine()); } public IEnumerator Example_WaitForEndOfFrame_Coroutine() { Debug.Log("Start of WaitForEndOfFrame Example"); yield return new WaitForEndOfFrame(); Debug.Log("End of WaitForEndOfFrame Example"); } }

WaitForFixedUpdate

using System.Collections; using UnityEngine; [ExecuteInEditMode] public class ExampleClass : MonoBehaviour { public void Start() { StartCoroutine(Example_WaitForFixedUpdate_Coroutine()); } public IEnumerator Example_WaitForFixedUpdate_Coroutine() { Debug.Log("Start of WaitForFixedUpdate Example"); yield return new WaitForFixedUpdate(); Debug.Log("End of WaitForFixedUpdate Example"); } }

WaitForSeconds

using System.Collections; using UnityEngine; [ExecuteInEditMode] public class ExampleClass : MonoBehaviour { public void Start() { StartCoroutine(Example_WaitForSeconds_Coroutine()); } public IEnumerator Example_WaitForSeconds_Coroutine() { Debug.Log("Start of WaitForSeconds Example"); yield return new WaitForSeconds(1.5f); Debug.Log("End of WaitForSeconds Example"); } }

WaitForSecondsRealtime

using System.Collections; using UnityEngine; [ExecuteInEditMode] public class ExampleClass : MonoBehaviour { public void Start() { StartCoroutine(Example_WaitForSecondsRealtime_Coroutine()); } public IEnumerator Example_WaitForSecondsRealtime_Coroutine() { Debug.Log("Start of WaitForSecondsRealtime Example"); yield return new WaitForSecondsRealtime(1.5f); Debug.Log("End of WaitForSecondsRealtime Example"); } }

WaitUntil

using System.Collections; using UnityEngine; [ExecuteInEditMode] public class ExampleClass : MonoBehaviour { public void Start() { StartCoroutine(Example_WaitUntil_Coroutine()); } public IEnumerator Example_WaitUntil_Coroutine() { Debug.Log("Start of WaitUntil Example"); yield return new WaitUntil(() => Time.time > 5.0f); Debug.Log("End of WaitUntil Example"); } }

WaitWhile

using System.Collections; using UnityEngine; [ExecuteInEditMode] public class ExampleClass : MonoBehaviour { public void Start() { StartCoroutine(Example_WaitWhile_Coroutine()); } public IEnumerator Example_WaitWhile_Coroutine() { Debug.Log("Start of WaitWhile Example"); yield return new WaitWhile(() => Time.time < 5.0f); Debug.Log("End of WaitWhile Example"); } }
  • Добавлен совет по использованию пакетного режима и сопрограмм в 2017.4
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3