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

相关推荐
仙魁XAN1 小时前
Unity 设计模式 之 创造型模式-【工厂方法模式】【抽象工厂模式】
unity·设计模式·工厂方法模式·抽象工厂模式
我要吐泡泡了哦3 小时前
GAMES104:15 游戏引擎的玩法系统基础-学习笔记
笔记·学习·游戏引擎
躺下睡觉~11 小时前
Unity-Transform类-父子关系
java·unity·游戏引擎
躺下睡觉~11 小时前
Unity-Transform类-缩放和看向
unity·游戏引擎
君莫愁。13 小时前
【Unity】检测鼠标点击位置是否有2D对象
unity·c#·游戏引擎
咩咩觉主14 小时前
Unity实战案例全解析:PVZ 植物卡片状态分析
unity·c#·游戏引擎
蓝裕安17 小时前
伪工厂模式制造敌人
开发语言·unity·游戏引擎
谢泽浩21 小时前
Unity 给模型贴上照片
unity·游戏引擎
z2014z21 小时前
Unity Resource System 优化笔记
unity·游戏引擎
王维志21 小时前
Unity 高亮插件HighlightPlus介绍
unity·游戏引擎