当前位置: 首页 > news >正文

Unity 协程

🌀 Unity 协程(Coroutine)

  • 协程(Coroutine):Unity 提供的一种“分时执行”机制,本质上不是多线程,而是在主线程上分步执行代码,避免卡顿。
  • 适用场景
    1. 异步加载资源或场景
    2. 批量生成对象
    3. 流程控制(动画、等待、定时器等)
    4. 异步操作(网络请求、下载)

1. 协程的本质

  • 协程分为两部分:
    1. 协程函数本体:利用 C# 的迭代器函数(IEnumerator + yield return)实现“分布执行”,可以把函数逻辑拆成多段依次执行。
    2. 协程调度器:Unity 内部实现,用于管理协程函数的执行时机,决定何时继续执行迭代器的下一段。
  • 核心理解:
    • 迭代器函数的 MoveNext() 方法可以遍历函数中各段逻辑,实现分时执行。
    • 协程调度器根据 yield return 返回的内容来决定下一步执行的时机。
  • 理论上,我们可以用迭代器函数自己实现调度器,替代 Unity 的协程调度器。

2. 协程 基本用法

协程函数必须满足两个条件:

  1. 返回值为 IEnumerator 或继承类型
  2. 函数内部使用 yield return 返回值
写法 含义
yield return null 下一帧继续执行
yield return new WaitForSeconds(seconds) 等待指定秒数后执行
yield return new WaitForFixedUpdate() 等待下一帧物理更新
yield return new WaitForEndOfFrame() 等待摄像机和GUI渲染完成后执行
yield break 退出协程
public class Test : MonoBehaviour
{void Start(){// 开启协程函数Coroutine c1 = StartCoroutine(MyCoroutine(1, "Hello"));Coroutine c2 = StartCoroutine(MyCoroutine(2, "World"));// 关闭协程函数StopCoroutine(c1);      // 一. 关闭指定协程StopAllCoroutines();    // 二. 关闭所有协程}// 定义协程逻辑IEnumerator MyCoroutine(int i, string str){print(i);yield return null;                       // 下一帧执行print(str);yield return new WaitForSeconds(1f);     // 等待 1 秒print("After 1 second");yield return new WaitForFixedUpdate();   // 等待下一帧物理更新print("After FixedUpdate");yield return new WaitForEndOfFrame();    // 等待渲染完成print("After EndOfFrame");// 可以循环执行while(true){print("Looping every 1 second");yield return new WaitForSeconds(1f);}}
}

注意:

  • 协程绑定在 MonoBehaviour 上,如果对象或组件被销毁或失活,协程会自动停止执行。
  • 协程本质是迭代器函数 + 调度器,并不是多线程,因此可以安全访问 Unity API,但不能阻塞主线程。

3. 自定义协程

  • 实现了按自己定的规则来执行逻辑:return的值就是等待多少秒
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Exercise7 : MonoBehaviour
{IEnumerator ie;IEnumerator MyCoroutine(){print("1");yield return 1;print("2");yield return 2;print("3");yield return 3;print("4");yield return 4;print("5");yield return 5;print("6");}void Start(){ie = MyCoroutine();CoroutineMgr.Instance.MyStartCoroutine(ie);}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;class YieldReturnTime
{//记录 下次还要执行的 迭代器接口public IEnumerator ie;//记录 下次执行的时间点public float time;
}class CoroutineMgr : MonoBehaviour
{private static CoroutineMgr instance;public static CoroutineMgr Instance => instance;//int时间类型协程迭代器private List<YieldReturnTime> list = new List<YieldReturnTime>();private void Awake(){instance = this;}//执行首次协程,加入迭代器列表public void MyStartCoroutine(IEnumerator ie){if (ie.MoveNext()){if (ie.Current is int){YieldReturnTime y = new YieldReturnTime();y.ie = ie;y.time = Time.time + (int)ie.Current;list.Add(y);}}}private void Update(){for (int i = list.Count - 1; i >= 0; i--){//判断 当前该迭代器函数 是否到了下一次要执行的时间//如果到了 就需要执行下一步了if (list[i].time <= Time.time){if (list[i].ie.MoveNext()){//如果过是true 那还需要对该迭代器函数进行处理if (list[i].ie.Current is int){list[i].time = Time.time + (int)list[i].ie.Current;}else{//该list 只是存储 处理时间相关 等待逻辑的 迭代器函数的//如果是别的类型 就不应该 存在这个list中 应该根据类型把它放入别的容器中list.RemoveAt(i);}}else{//后面已经没有可以等待和执行的了 证明已经执行完毕了逻辑list.RemoveAt(i);}}}}
}
http://www.zskr.cn/news/81624.html

相关文章:

  • 2025年高压试验变压器/核相仪/电加热器/接地电阻测试仪/串联谐振耐压试验装置等电力试验设备厂家推荐 - 品牌推荐大师
  • 微软印度投资175亿 | NEO发布 | 阿里推出QwenCodev0.3.0 | Google推AI眼镜要来了
  • 2025凝胶电泳仪/琼脂糖电泳仪/进口替代仪器/分子生物仪器/生命科学仪器/WB/核酸/ecl凝胶成像分析系统哪家性价比高?认准实力制造商/源头厂家 - 品牌推荐大师1
  • 2025年冷热冲击试验箱/氙灯老化试验箱/高低温冲击试验箱/紫外老化试验箱/高低温试验箱哪家好?优质厂家排名比较好的推荐 - 品牌推荐大师1
  • Spring Boot Web 开发入门:分层架构、解耦设计与 IOC 核心思想
  • 2025年国产水质分析仪厂家推荐:多参数/四参数/便携式/氨氮/总磷/总氮/余氯/COD水质分析仪哪个品牌好? - 品牌推荐大师1
  • 2025年晶圆烘箱厂家推荐,国内品牌哪个好?哪家性价比高? - 品牌推荐大师
  • 深入解析:CV三大核心任务:目标检测、图像分割、关键点检测
  • Alientech KESS V3/KESS3 Slave: Activate Bike, ATV UTV Bench-Boot Protocols for Tuning Diagnostics
  • 2025年实验室通风系统/实验室气路系统公司/厂家推荐:实验室通风系统/实验室气路系统哪家好?哪家专业? - 品牌推荐大师
  • 超微粉碎机十大知名品牌推荐/行业领先企业/中药超微粉碎机源头厂家/灵芝超微粉碎机靠谱制造商/头部企业/实力生产商哪家好/优质供应商哪家强/生产商口碑推荐 - 品牌推荐大师1
  • 实用指南:C++中有双向映射数据结构吗?Key和Value能否双向查找?
  • 高级程序语言第九次
  • 12月10日
  • Alientech KESS3 Slave: Activate Marine PWC OBD Protocols for Automotive Repairs
  • 蓝桥杯嵌入式赛道—-软件篇(GPIO输出模式调整)
  • 2025年河南四大音视频设备热门厂家排行榜:聚焦led显示屏、液晶拼接屏等核心品类标杆企业 (1) - 朴素的承诺
  • 策略模式-行为型
  • 2025年12月远程控制软件权威排名:易用性和稳定连接评分与选择指南
  • 2025年国产仪器权威推荐:国产液相色谱仪/X衍射仪/超纯水生产商哪个品牌好? - 品牌推荐大师1
  • 详细介绍:碳中和终极武器——嵌入式AI重构能源管理战局
  • 初学WPF
  • 2025年Q4全国球墨铸铁管厂家哪家好?全场景适配推荐,工程采购权威榜单 - AIEO
  • 2025 年 12 月北京装修口碑 TOP10:亿丰方圆 99.9 分封神 全场景无忧指南 - 品牌智鉴榜
  • 2025年12月实验室装修/实验室改造/实验室设计找哪家?哪家靠谱?怎么联系? - 品牌推荐大师
  • 2025 年 12 月全国太阳能路灯厂家五大推荐:雷泰照明领衔,高性价比户外照明解决方案优选 - 深度智识库
  • 若依微服务版从零搭建
  • 公司企业年会抽奖小程序
  • Flask学习笔记
  • 2025微型加热器十佳品牌技术白皮书——高精度温控解决方案供应商推荐榜 - 品牌推荐大师1