添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
爱跑步的香蕉  ·  react17+18 中 ...·  5 天前    · 
侠义非凡的剪刀  ·  Requete nombre ...·  4 月前    · 
含蓄的莲藕  ·  科技赋能 ...·  4 月前    · 
豪爽的灯泡  ·  【联想 小新Air 15 ...·  6 月前    · 

本页将介绍在批处理模式下运行 Unity Editor 和独立平台播放器 (Standalone Player) 时支持的功能。

运行 Unity 时,以下内置 协程 运算符可添加功能:

  • AsyncOperation

  • WaitForEndOfFrame

  • WaitForFixedUpdate

  • WaitForSeconds

  • WaitForSecondsRealtime

  • WaitUntil

  • WaitWhile

  • 下表显示了 Unity 在 Editor 和独立平台播放器中支持的运算符,还包括使用 -batchmode 命令行参数以批处理模式运行两者时的运算符支持情况:

    * 使用 -batchmode 运行 Editor 时,不能使用 WaitForEndOfFrame ,因为动画、物理和时间轴等系统可能无法在 Editor 中正常工作。这是因为 Unity 在使用 WaitForEndOfFrame 时当前不会更新这些系统。

    在 Editor 中

    在 Editor 中,按下“Play”按钮以使用协程运行代码。

    批处理模式下的 Editor

    要在以批处理模式启动 Editor 时从命令行运行协程,请输入:

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