This page describes the supported features when running the Unity Editor and Standalone Player in batch mode.
When running Unity, the following built-in coroutine operators add functionality:
The following table shows which of these operators Unity supports inside the Editor and Standalone Player, and when running each of them in batch mode using the -batchmode command line argument:
Редактор | Editor -batchmode | Unity Standalone Player | Unity Standalone Player -batchmode | |
---|---|---|---|---|
AsyncOperation |
Да | Да | Да | Да |
WaitForEndOfFrame |
Да | No* | Да | Да |
WaitForFixedUpdate |
Да | Да | Да | Да |
WaitForSeconds |
Да | Да | Да | Да |
WaitForSecondsRealtime |
Да | Да | Да | Да |
WaitUntil |
Да | Да | Да | Да |
WaitWhile |
Да | Да | Да | Да |
* You cannot use WaitForEndOfFrame
when running the Editor with -batchmode
, because systems like animation, physics and timeline might not work correctly in the Editor. This is because Unity does not currently update these systems when using WaitForEndOfFrame
.
In the Editor, press the “Play” button to run your code with coroutines.
To run coroutines when launching the Editor in batch mode from the command line, enter:
C:\Program Files\Unity\Editor\Unity.exe -projectPath PROJECT_PATH -batchMode
Launch your Standalone Player to run your code. The Player loads and then waits for your coroutines to complete.
To run coroutines when launching the Player in batch mode from the command line, enter:
PATH_TO_STANDALONE_BUILD -projectPath PROJECT_PATH -batchMode
For example, on Windows:
C:\projects\myproject\builds\myproject.exe -batchMode
On 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");
}
}
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");
}
}
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");
}
}
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");
}
}
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");
}
}
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");
}
}
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");
}
}
2018–06–06 Page published with editorial review
Added advice on using batchmode and coroutines in 2017.4