Version: 5.4

CustomYieldInstruction

class in UnityEngine

マニュアルに切り替える

説明

コルーチンを中断するカスタム Yield 命令の基本クラス

CustomYieldInstruction はイベントが起こるまでコルーチンの実行を中断するカスタム Yield 命令を実装することができます。水面下では、カスタム Yield 命令はちょうど別の実行中のコルーチンです。それを実装するには CustomYieldInstruction クラスから継承し、keepWaiting プロパティーをオーバーライドします。コルーチンを中断させておくために True を返します。コルーチンの実行を続行させるために False を返します。ref::keepWaiting プロパティーは MonoBehaviour.Update の後と MonoBehaviour.LateUpdate の前の各フレームにクエリさせます。

このクラスは Unity 5.3 以降で使用できます。

using UnityEngine;

// Implementation of WaitWhile yield instruction. This can be later used as: // yield return new WaitWhile(() => Princess.isInCastle); class WaitWhile: CustomYieldInstruction { Func<bool> m_Predicate;

public override bool keepWaiting { get { return m_Predicate(); } }

public WaitWhile(Func<bool> predicate) { m_Predicate = predicate; } }

詳細に制御して、より複雑な Yield 命令を実装するために System.Collections.IEnumerator クラスから直接継承できます。この場合、ref::keepWaiting プロパティーを実装するのと同じように MoveNext() メソッドを実装します。さらに Current プロパティーでオブジェクトを返すこともできます。 MoveNext() メソッドを実行後、 Unity のコルーチンスケジューラによって処理されます。ですから例えば CurrentIEnumerator から継承する別のオブジェクトを返した場合、現在の列挙子はひとつが返ってくるまで中断されます。

// Same WaitWhile implemented by inheriting from IEnumerator.
class WaitWhile: IEnumerator {
	Func<bool> m_Predicate;

public object Current { get { return null; } }

public bool MoveNext() { return m_Predicate(); }

public void Reset() {}

public WaitWhile(Func<bool> predicate) { m_Predicate = predicate; } }

変数

keepWaitingコルーチンを中断させておく必要がある場合、表示します。