調べたこと
UnityでIEnumerator()を待つ場合、StartCoroutineを使う方法とMoveNext()メソッドとCurrentプロパティを使う方法がある。
2種類の書き方にはどんな違いあるか気になったので調べてみた。
検証コード
using UnityEngine;
using System.Collections;
public class IEnumeratorBehavior : MonoBehaviour
{
const int count = 3;
void Start ()
{
Debug.Log("start");
StartCoroutine(test1());
StartCoroutine(test2());
}
void Update ()
{
Debug.Log("update");
}
IEnumerator test1()
{
yield return StartCoroutine(ie("test1"));
}
IEnumerator test2()
{
var e = ie("test2");
while (e.MoveNext())
{
yield return e.Current;
}
}
IEnumerator ie(string s)
{
for(int i=0; i<count; ++i)
{
Debug.LogWarning(s + " " + i);
yield return null;
}
}
}
実行結果
結論
どっちも挙動は変わらなかったから短く書ける StartCoroutine() の方が良さげ
実行結果を見て「おや、出力順はなんでこうなる…」と思われた方は以下の「イベント関数の実行順」もご参考ください。
http://docs.unity3d.com/ja/current/Manual/ExecutionOrder.html