Unity 的协程是通过 IEnumerator实现的。类似于切分成很多代码块,通过moveNext判断哪个代码块应该执行。
public interface IEnumerator
{
object Current
{
get;
}
bool MoveNext();
void Reset();
}
MoveNext返回bool就是用来判断是否可以执行接下来的代码块。
因此只要继承IEnumerator,然后修改moveNext的判定方式,就可以通过yield return Class 这种方式判断是否继续执行。
yield return new WaitWhile 和 WaitUntil 返回bool 也是这个意思。
Unity有一个写好的类CustomYieldInstruction,这个类继承IEnumerator,然后实现了方法。
因此只需要继承CustomYieldInstruction这个类就行。
public class CustomCameraBase : CustomYieldInstruction
{
protected bool isLoad;
public override bool keepWaiting
{
get
{
return !isLoad;
}
}
}