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

Unity实现异步的三种方法

Unity实现异步的三种方法

  • Update
  • 协程
  • async/await Task

因为工作时用到了UniTask,所以就简单比较了下在Unity在实现异步时的三种方法。

Update

Update是使用Mono生命周期的Update/LateUpdate/FixedUpdate等更新方法来控制自己方法的调用时间,如下:

private void Update()
{DoStep();
}private int step = 1;
private float funTimeInterval;
private void DoStep()
{if (funTimeInterval > 0){funTimeInterval -= Time.deltaTime;return;}switch (step){case 1:HelloWorld1();funTimeInterval = 3;break;case 2:HelloWorld2();break;default:return;}step++;
}

上述代码就是通过Update,去让我们执行HelloWorld1之后,等待3秒,再执行HelloWorld2。
缺点: 会增加很多成员变量,让代码变得复杂,导致容易出错,扩展性不高,且依托于Monobehaviour。

协程

在协程中,可以通过Unity的语法糖来进行等待,实现功能的异步。如下:

private void Start()
{StartCoroutine(nameof(TextCoroutine));
}private IEnumerator TextCoroutine()
{HelloWorld1();yield return new WaitForSeconds(3);HelloWorld2();
}

优点
1、无额外的成员变量
2、线性的代码结构让拓展性与可读性更高
缺点
1、消耗大:协程的本质是迭代器,在开启协程时,会实例化一个接口对象。
2、无法进行异常的处理
3、依托于MonoBehaviour

async/await Task

我使用的是UniTask插件是Unity的高性能、0GC的async/await解决方案,它提供了与原生Task高度兼容的异步操作。。代码如下:

private async void Start()
{// UniTask的等待是按毫秒计算的// 等待3秒,执行HelloWorld1await UniTask.Delay(3000);HelloWorld1();// 等待bar加载完成,执行HelloWorld2var asset2 = await Resources.LoadAsync<TextAsset>("bar");HelloWorld2();
}

优点
1、代码的拓展性与可读性更高
2、可以进行异常的处理
3、0GC
4、丰富的 API 集,提供附加功能

总的来说,如果对于性能消耗有要求,且对于异步的处理有要求的开发同学,用UniTask进行开发是一个很不错的选择。

参考链接:
协程参考链接
UniTask的Gitee地址
UniTask学习笔记


http://www.mrgr.cn/news/9770.html

相关文章:

  • CSS的font-stretch属性与字符胖瘦控制
  • Kubernetes中etcd备份与恢复
  • 学习WebGl基础知识
  • reactive() 的局限性
  • Java设计模式原则及中介者模式研究
  • 环境搭建 | Windows中MinGW-w64及GCC的下载、安装与配置
  • github源码指引:共享内存、数据结构与算法
  • 代码随想录训练营 Day38打卡 动态规划 part06 322. 零钱兑换 279. 完全平方数 139. 单词拆分
  • 基于QT与STM32的电力参数采集系统(华为云IOT)(211)
  • TensorFlow 的基本概念和使用场景
  • 变异性:Covariance与Contravariance在C#中的运用艺术
  • AI在医学领域:HYDEN一种针对医学图像和报告的跨模态表示学习方法
  • 【MySQL数据库管理问答题】第3章 理解 MySQL 体系
  • 33.鼠标悬停时的波浪线效果 CSS 重置
  • centos彻底卸载docker服务
  • Linux并发与竞争
  • 无人机智能化程度怎么样?
  • 数据结构(6.3_2)——图的深度优先遍历
  • 企业本地部署大型语言模型(LLMs)构建本地垂直领域知识库的策略|空天防御
  • 前端音视频以及(关于收集用户信息的标签)