Unity Coroutine 协程

Unity Coroutine 是一种在 Unity 引擎中实现异步编程的技术,它可以让你在多个帧中分段执行一个函数,而不是一次性地执行完毕。Coroutine 可以使用 yield 语句来暂停和恢复执行,从而实现一些复杂的逻辑和效果,如时间延迟、循环动画、网络请求等。Coroutine 是基于 IEnumerator 接口的,它必须包含至少一个 yield 语句,并返回一个 IEnumerator 对象。你可以使用 StartCoroutine 函数来启动一个 Coroutine,使用 StopCoroutine 函数来停止一个 Coroutine。

协程(Coroutine)在我们游戏开发中有着比较重要的地位.

协程全名协同程序, 和线程不同, 协程是依附于主线程执行的, 相当于在主线程上夺取了一定的执行时间片.

也可以理解为在主线程的调用之外开辟了一个单独的调用栈, 并在协程消亡之前能保存内部信息和与其它协程共享公用信息.

协程实质是运行在主线程, 代码仍然是同步执行, 只是在某些点被挂起然后重新进行主线程其它代码的执行, 之后重新进入协程时可以从离开点继续执行. 这点和递归有些类似.

协程的核心概念有挂起和恢复, 挂起即执行到某个位置后停止, 直到被外部恢复.


版权声明:本文为CSDN博主「拂面清风三点水」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/woodengm/article/details/119255321

例子:

void Start()
{
	var cor = StartCoroutine(Example());
	StopCoroutine(cor);
}

IEnumerator Example()
{
    print(Time.time);
    yield return new WaitForSeconds(5);
    print(Time.time);
}

在 Unity 中怎么创建和使用协程。协程是一种可以在多个帧中分段执行的函数,它可以使用 yield 语句来暂停和恢复执行。在 Unity 中,你可以使用 StartCoroutine 函数来启动一个协程,使用 StopCoroutine 函数来停止一个协程。你的代码中有一个协程函数 Example 和一个普通函数 Start,我来逐行解释它们的作用:

  • void Start():这是一个 Unity 的内置函数,它会在脚本实例被加载时调用一次,通常用于初始化一些变量或执行一些操作。
  • var cor = StartCoroutine(Example()):这一行会启动 Example 协程,并把返回的 Coroutine 对象赋值给 cor 变量。Coroutine 对象是一个用于控制协程的对象,你可以用它来停止或查询协程的状态。
  • StopCoroutine(cor):这一行会停止 cor 变量对应的协程,也就是 Example 协程。这意味着 Example 协程不会继续执行下去了。
  • IEnumerator Example():这是一个协程函数,它的返回类型是 IEnumerator,它必须包含至少一个 yield 语句。
  • print(Time.time):这一行会打印当前的游戏时间到控制台,Time.time 是一个 Unity 提供的变量,它表示从游戏开始到现在经过的秒数。
  • yield return new WaitForSeconds(5):这一行是一个 yield 语句,它会让协程暂停执行,并等待 5 秒后再恢复执行。WaitForSeconds 是一个 Unity 提供的对象,它可以用于实现时间延迟的效果。
  • print(Time.time):这一行会再次打印当前的游戏时间到控制台。

如果你运行这段代码,你会发现控制台只打印了一次游戏时间,而不是两次。这是因为你在 Start 函数中启动了 Example 协程后,马上就停止了它。所以 Example 协程只执行了第一行 print 语句,然后就被终止了。如果你想让 Example 协程完整地执行完毕,你需要把 Start 函数中的 StopCoroutine(cor) 这一行注释掉或删除掉。这样,Example 协程就会在第一次打印游戏时间后等待 5 秒,然后再打印第二次游戏时间。

相关推荐
超龄魔法少女21 小时前
[Unity] ShaderGraph动态修改Keyword Enum,实现不同效果一键切换
unity·技术美术·shadergraph
蔗理苦1 天前
2024-12-24 NO1. XR Interaction ToolKit 环境配置
unity·quest3·xr toolkit
花生糖@1 天前
Android XR 应用程序开发 | 从 Unity 6 开发准备到应用程序构建的步骤
android·unity·xr·android xr
向宇it1 天前
【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理
开发语言·unity·c#·编辑器·游戏引擎
虾球xz1 天前
游戏引擎学习第55天
学习·游戏引擎
虾球xz1 天前
游戏引擎学习第58天
学习·游戏引擎
ue星空1 天前
虚幻引擎结构之UWorld
游戏引擎·虚幻
ue星空1 天前
虚幻引擎结构之ULevel
游戏引擎·虚幻
向宇it1 天前
【从零开始入门unity游戏开发之——unity篇01】unity6基础入门开篇——游戏引擎是什么、主流的游戏引擎、为什么选择Unity
开发语言·unity·c#·游戏引擎
神洛华1 天前
Y3地图制作1:水果缤纷乐、密室逃脱
编辑器·游戏引擎·游戏程序