Version: 2017.4
コマンドライン引数
アセットの内部処理

バッチモードとビルトインコルーチンの互換性

ここでは、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

コルーチンのスクリプト例

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–06–06 編集レビュー を行ってパブリッシュされたページ

  • バッチモードとコルーチンの使用に関する情報は 2017.4 に追加

コマンドライン引数
アセットの内部処理