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 秒,然后再打印第二次游戏时间。

相关推荐
不伤欣16 小时前
游戏设计模式 - 子类沙箱
游戏·unity·设计模式
Magnum Lehar18 小时前
vulkan游戏引擎test文件memory实现
游戏引擎
Magnum Lehar18 小时前
vulkan游戏引擎test_manager实现
java·算法·游戏引擎
快乐觉主吖1 天前
Unity的日志管理类
android·unity·游戏引擎
WarPigs1 天前
Unity性能优化笔记
笔记·unity·游戏引擎
T.D.C2 天前
【业务框架】3C-相机-Cinemachine
unity
一线灵2 天前
跨平台游戏引擎 Axmol-2.6.1 发布
游戏引擎
Clank的游戏栈2 天前
Unity基于GraphView的可视化关卡编辑器开发指南
unity·编辑器·游戏引擎
海尔辛2 天前
Unity UI 性能优化--Sprite 篇
ui·unity·性能优化
三巧3 天前
Godot 敌人生成半径和围墙不匹配,导致敌人错误的生成在围墙外的解决代码
游戏引擎·godot