此页面描述了在批处理模式下运行 Unity 编辑器和独立播放器时支持的功能。
运行 Unity 时,以下内置协程操作符会添加功能
下表显示了 Unity 在编辑器和独立播放器内部以及使用-batchmode命令行参数在批处理模式下运行每个操作符时支持哪些操作符
编辑器 | 编辑器 -batchmode | Unity 独立播放器 | Unity 独立播放器 -batchmode | |
---|---|---|---|---|
AsyncOperation |
是 | 是 | 是 | 是 |
WaitForEndOfFrame |
是 | 否* | 是 | 是 |
WaitForFixedUpdate |
是 | 是 | 是 | 是 |
WaitForSeconds |
是 | 是 | 是 | 是 |
WaitForSecondsRealtime |
是 | 是 | 是 | 是 |
WaitUntil |
是 | 是 | 是 | 是 |
WaitWhile |
是 | 是 | 是 | 是 |
* 使用-batchmode
运行编辑器时,不能使用WaitForEndOfFrame
,因为像动画、物理和时间线这样的系统在编辑器中可能无法正常工作。这是因为 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");
}
}
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 年 6 月 6 日 发布页面
在 2017.4 中添加了有关在 batchmode 和协程中使用的建议