【Unity】 カスタムコルーチンでこのコールバックからの卒業
Unity5.3からカスタムコルーチンを使えるぞ!これで何ができるの?いろんな条件で処理を止められるぞ
……という他に、コルーチンの戻り値を受け取るのにコールバックを使ってる部分をマシにできたりする。
普通のコルーチンメソッドで書くとこんな感じなのを
IEnumerator Routine(System.Action<int> callback) { var result = 0; for (int i = 0; i < 100; ++i) { yield return null; ++result; } callback(result); }
こう書ける。
public class Keisan : CustomYieldInstruction { public int Result { get; private set; } IEnumerator routine; public Keisan() { routine = Routine(); } public override bool keepWaiting { get { return routine.MoveNext(); } } IEnumerator Routine() { for(int i=0; i<100; ++i) { yield return null; ++Result; } } }
メソッドで書くほうが短いやんけ!
まあ、コールバックとかツライときありますし。
呼び方を比較するとこんな感じ。
IEnumerator Start() { int kekka = 0; yield return Routine(result => kekka = result); Debug.Log(kekka); var keisan = new Keisan(); yield return keisan; Debug.Log(keisan.Result); }