MonoBehaviourの機能として提供されているStartCoroutineをちょっとだけ触ったので忘れないようにメモメモ。
logの1は即座に表示され、
logの2は3秒待ったあとに表示され、
logのisFlgは5秒待ったあとに表示される。
ここで、logの2とlogのisFlgのwaitTimeがもし両方とも3秒の場合は、一気に表示される。
つまりその前のコルーチンのwaitをその下に書いたコルーチンは引きづられない。
サンプルコード
using UnityEngine; using System; using System.Collections; public class Coroutine : MonoBehaviour { // Use this for initialization void Start () { Debug.Log(1); StartCoroutine(wait()); StartCoroutine(waitForCallback(5f, (bool isFlg) => { Debug.Log(isFlg); })); } // Update is called once per frame void Update () { } IEnumerator wait() { yield return new WaitForSeconds(3f); Debug.Log(2); } IEnumerator waitForCallback(float waitTime, Action<bool> callback) { yield return new WaitForSeconds(waitTime); callback(true); } }
なかなか面白いね。
これよく見るサンプルではStartメソッドの中に書かれているけど、Updateメソッドの中で書く場合は、
フラグとかもたして、間引く?必要があるのかな。
じゃないと、フレームごとにUpdateメソッドが呼ばれて、キューにコルーチンが溜まりまくってしまいそう。
そもそもそんなタイミングで使わないのかな。
こうゆうの作っておけば便利なのかな
using UnityEngine; using System; using System.Collections; public class Callback { public static IEnumerator waitForCallback(float waitTime, Action callback) { yield return new WaitForSeconds(waitTime); callback(); } }
gist
参考リンク
- C# in Unity3D – Dynamic Methods with Lambda Expressions
- Unity Script Reference:
- ActionScript入門Wiki – Unity – コルーチンとyield
Unity4入門 最新開発環境による簡単3Dゲーム製作
posted with amazlet at 13.08.30
浅野 祐一 荒川 巧也 森 信虎
ソフトバンククリエイティブ
売り上げランキング: 4,554
ソフトバンククリエイティブ
売り上げランキング: 4,554