在做一些序列执行的任务的时候,发现Coroutines协程的WaitUntil很好用,特别是回合类战斗.善于处理一些队列内元素有执行时间的,序列处理事件
例子:一个队列.每个队列中元素,都要等待一定时间,用来处理完毕当前元素的事件.再让队列处理下一个元素的情况.直到队列清空.
可以使用协程的yield return new WaitUntil(() => IsBool);---这种条件写法来实现.
协程的常用写法.
yield return null;
使协程在下一帧继续执行,但不进行任何等待。
yield return new WaitForEndOfFrame();
等待直到当前帧渲染结束。
yield return new WaitForFixedUpdate();
等待直到下一个固定更新周期,通常用于物理相关的操作。
yield return new WaitForSeconds(float seconds);
等待指定的时间(以秒为单位)。
yield return new WaitUntil(Func predicate);
WaitUntil常用的Lambda 表达式
以下是几个使用 WaitUntil 时常见的 Lambda 表达式(匿名函数)示例,涵盖了比较大小、布尔值以及逻辑与(&&)、或(||)、非(!)操作符:
比较大小:
等于某个值:
yield return new WaitUntil(() => myInteger == 10);大于某个值:
yield return new WaitUntil(() => myFloat > 5.0f);小于某个值:
yield return new WaitUntil(() => myDouble < 100.0);布尔值:
等待布尔字段变为
true:yield return new WaitUntil(() => isReady);等待布尔字段变为
false:yield return new WaitUntil(() => !isPaused);逻辑与(&&):
两个条件都为真时继续:
yield return new WaitUntil(() => isReady && hasStarted);逻辑或(||):
任意一个条件为真时继续:
yield return new WaitUntil(() => isReady || hasEnded);逻辑非(!):
条件为假时继续:
yield return new WaitUntil(() => !isGameOver);组合逻辑:
组合使用与、或、非:
yield return new WaitUntil(() => (isReady && !isPaused) || hasFinished);这些示例展示了如何在
WaitUntil中使用 Lambda 表达式来定义等待条件。在实际的 Unity 项目中,这些条件通常会与游戏逻辑、玩家输入、资源加载、动画状态等相结合,以便在满足特定条件时触发协程的下一步操作。