版本:Unity 6 (6000.0)
语言:English
Unity 独立播放器命令行参数
基于文本的场景文件

批处理模式和内置协程兼容性

此页面描述了在批处理模式下运行 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

示例协程脚本

AsyncOperation

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");
    }
}

  • 2018 年 6 月 6 日 发布页面

  • 在 2017.4 中添加了有关在 batchmode 和协程中使用的建议

Unity 独立播放器命令行参数
基于文本的场景文件