Unity-协程

在 Unity 中,协程(Coroutine) 是一种特殊的函数,它允许你暂停执行并在未来的某个时间点继续。这使得你可以编写出非阻塞的代码,非常适合处理那些需要等待一段时间或者依赖于某些条件满足后才能继续执行的操作。协程是基于 C# 的 IEnumerator 和 yield 关键字实现的。

协程的基本概念

  • 暂停和恢复:协程可以在执行过程中使用 yield return 语句来暂停,并在特定条件下继续执行。常见的暂停方式包括:
    yield return null;:暂停一帧。
    yield return new WaitForSeconds(seconds);:暂停指定秒数。
    yield return new WaitForEndOfFrame();:暂停到当前帧渲染结束。
    yield return new WaitForFixedUpdate();:暂停到下一个物理更新周期。
  • 生命周期:协程的生命周期通常与 MonoBehaviour 组件相关联。当组件被销毁时,所有关联的协程也会自动停止。
  • 返回类型:协程必须返回 IEnumerator 类型,这是因为它们依赖于迭代器来管理其状态。
  • 启动协程:可以通过 StartCoroutine 方法启动一个协程。

启动协程的方法

  • 直接传递方法名
StartCoroutine(MyCoroutine());
  • 使用匿名方法或局部方法
StartCoroutine(ExampleRoutine());

IEnumerator ExampleRoutine()
{
    yield return new WaitForSeconds(2);
    Debug.Log("Waited for 2 seconds");
}

协程的应用场景

  • 延迟执行:如上所示,可以用协程来实现延迟执行逻辑而不阻塞主线程。

  • 动画和过渡效果:用于创建平滑过渡效果,比如淡入淡出、移动物体等。

  • 异步操作:虽然 Unity 提供了更现代的异步编程模型(如 async/await),但在某些情况下,协程仍然是处理异步任务的好选择。

  • 游戏循环中的事件:例如,在游戏循环中每隔几秒钟执行一次检查。

示例

using UnityEngine;
using System.Collections;

public class CoroutineExample : MonoBehaviour
{
    void Start()
    {
        // 启动协程
        StartCoroutine(DelayedAction());
    }

    IEnumerator DelayedAction()
    {
        Debug.Log("开始计时...");
        // 暂停协程5秒钟
        yield return new WaitForSeconds(5f);
        Debug.Log("5秒已过!");
    }
}
posted @ 2025-08-08 17:28  motley  阅读(37)  评论(0)    收藏  举报