На этой странице описываются поддерживаемые функции при запуске редактора Unity и автономного проигрывателя в пакетном режиме.
При запуске Unity следующие встроенные операторы coroutine добавляют функциональность:
- AsyncOperation
- WaitForEndOfFrame
- WaitForFixedUpdate
- WaitForSeconds
- WaitForSecondsRealtime
- WaitUntil
- WaitWhile
В следующей таблице показано, какие из этих операторов 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