文章目录
-
- 简介
- 1. **yield return**
- 2. **yield break**
- 3. **WaitForSeconds**
- 4. **WaitUntil**
- 5. **WaitWhile**
- 6. **WaitForEndOfFrame**
- 7. **WaitForFixedUpdate**
- 8. **WWW** (Unity 5.x及更早版本) 或者 **UnityWebRequest**
- 9. **Custom Yield Instructions**
- 10. **WaitForSecondsRealtime**
- 11. **Coroutine.WaitForCompletion**
- 12. **Custom Yield Instructions(自定义Yield Instruction)**
- 13. **WaitUntil/WaitWhile with Unity Events**
简介
yield return
和 yield break
是 C# 中迭代器方法的关键字,它们在 Unity 协程中被用来控制协程的执行流程。而 WaitForSeconds
、WaitUntil
和 WaitWhile
是 Unity 内置的 Yield Instruction 类型,用于实现异步等待特定条件满足时继续执行协程。
1. yield return
yield return
语句在协程(IEnumerator)中使用,允许函数在执行过程中暂停并返回一个值给调用者。- 当Unity通过
StartCoroutine
调用包含yield return
的函数时,该函数不会像普通函数那样立即执行到底,而是每遇到一次yield return
就会暂停并返回当前的“结果”(可以是任意类型,包括各种 Yield Instruction),然后在下一帧或指定条件满足时继续执行后续代码。 - 示例:
yield return new WaitForSeconds(2f);
表示协程将暂停执行2秒后继续。
2. yield break
yield break;
在协程中表示终止整个迭代过程,相当于跳出整个协程。- 当
yield break;
执行时,协程会立刻停止,不会执行任何剩余的yield return
语句。
3. WaitForSeconds
WaitForSeconds(float seconds)
是一个 Yield Instruction 类型,当它作为yield return
的返回值时,会让协程暂停指定秒数之后再继续执行。- 示例:
IEnumerator MyCoroutine() { Debug.Log("Coroutine start"); yield return new WaitForSeconds(3); Debug.Log("Coroutine resumes after 3 seconds"); } void Start() { StartCoroutine(MyCoroutine()); }
4. WaitUntil
WaitUntil(Func<bool> predicate)
接收一个布尔函数作为参数,在该函数返回true
之前,协程会一直暂停执行。- 示例:
bool isPlayerReady = false; IEnumerator WaitForPlayerReady() { while (!isPlayerReady) { yield