ここでは、Unity エディターとスタンドアロンプレイヤーをバッチモードで実行するときに、サポートされる機能について説明します。
Unity を使用する際に、以下のビルトイン コルーチン オペレーターで機能を加えることができます。
以下の表は、エディター、スタンドアロンプレイヤー、それぞれをバッチモードコマンドライン引数を使用してバッチモードで実行する場合に、どの演算子がサポートされるかを示しています。
Editor | エディター (バッチモード) | 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 |
* -batchmode
でエディターを実行する場合は、 WaitForEndOfFrame
を使用できません。なぜなら、アニメーション、物理演算、タイムラインなどのシステムがエディターで正しく動作しない可能性があるからです。なぜなら、WaitForEndOfFrame
を使用すると Unity がこれらのシステムを更新しないことが原因です。
エディターでコルーチンを使用してコードを実行するには、再生ボタンを押します。
エディターをバッチモードで起動するときにコルーチンを実行するには、コマンドラインに以下を入力します。
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–06–06 編集レビュー を行ってパブリッシュされたページ
バッチモードとコルーチンの使用に関する情報は 2017.4 に追加