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

相关推荐
omegayy17 小时前
Unity 2022.3.x部分Android设备播放视频黑屏问题
android·unity·视频播放·黑屏
虾球xz19 小时前
游戏引擎学习第200天
学习·游戏引擎
woshihedayu20 小时前
虚幻引擎控制角色跟随移动方向旋转的方法
游戏引擎·虚幻
虾球xz21 小时前
游戏引擎学习第199天
学习·游戏引擎
与火星的孩子对话1 天前
Unity3D开发AI桌面精灵/宠物系列 【三】 语音识别 ASR 技术、语音转文本多平台 - 支持科大讯飞、百度等 C# 开发
人工智能·unity·c#·游戏引擎·语音识别·宠物
向宇it1 天前
【零基础入门unity游戏开发——2D篇】2D 游戏场景地形编辑器——TileMap的使用介绍
开发语言·游戏·unity·c#·编辑器·游戏引擎
牙膏上的小苏打23332 天前
Unity Surround开关后导致获取主显示器分辨率错误
unity·主屏幕
Unity大海2 天前
诠视科技Unity SDK开发环境配置、项目设置、apk打包。
科技·unity·游戏引擎
浅陌sss2 天前
Unity中 粒子系统使用整理(一)
unity·游戏引擎
维度攻城狮2 天前
实现在Unity3D中仿真汽车,而且还能使用ros2控制
python·unity·docker·汽车·ros2·rviz2