Unityでcoroutineを使用した際
whileを使用して待ち処理を作ることがよくあります。
test1.cs
class ABC {
public bool isBusy;
}
IEnumerator Hoge()
{
ABC a = new ABC();
while(a.isBusy) {
yield retun null;
}
}
WWWクラスを使用した際は
test2.cs
IEnumerator Hoge()
{
WWW www = new WWW();
yield return www;
}
…なんかズルい…
自分が作ったclassでもwhile使わずに書きたい!
ググったところ Unity5.3から使える
CustomYieldInstructionを使用すれば実装出来ました。
CustomYieldInstructionのkeepWaitingプロパティを
オーバーライドして条件を書けばOKでした。
test3.cs
class ABC : CustomYieldInstruction {
public bool isBusy;
public override bool keepWaiting {
get { return isBusy; }
}
}
IEnumerator Hoge()
{
ABC a = new ABC();
yield return a;
}
便利!簡潔!