关于UniTask的一些见解

这篇具有很好参考价值的文章主要介绍了关于UniTask的一些见解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

#关于UniTask的一些见解
http://t.csdn.cn/T1fua
unitask,unity
#Unity 的 UniTask 是一种用于异步编程的 C# 库,它扩展了 .NET 中的 Task 和 await/async 模式。
1. 与传统的 Task 和 async/await 模式相比,UniTask 更加轻量级,因为它不需要像 Task 一样创建和管理线程池。
2. UniTask 具有更高的性能,因为它使用了更少的内存和 CPU 资源。
3. UniTask 还提供了更多的功能,如取消和超时等功能,这些功能在传统的 Task 中并不容易实现。

#Unitask 的常见用法:
异步等待:使用 await 关键字,可以等待一个异步操作完成,这样就不需要手动处理回调或使用协程。

延迟执行:使用 UniTask.Delay 方法可以在指定的时间后执行一个操作,而不需要使用协程或计时器。

同步化操作:使用 UniTask.SwitchToMainThread 方法可以在主线程上执行一个操作,这对于访问 Unity 的组件或 API 非常有用。

迭代器:使用 UniTask.ToCoroutine 方法可以将一个 UniTask 对象转换为 IEnumerator,从而可以在协程中使用。

任务链:使用 UniTask.WhenAll 或 UniTask.WhenAny 方法可以创建一个任务链,等待多个异步操作完成后执行下一步操作。

取消任务:使用 UniTaskCancellationToken 类可以取消异步操作,这对于长时间运行的操作非常有用。

#UniTask的特点
1.UniTask是一种基于C#结构体的异步操作库,可以在Unity中使用,UniTask使用了自定义的AsyncMethodBuilder来实现零GC的目标,这使得所有Unity的异步操作和协程可以使用await语法。
3.unitask可以为 Unity 提供有效的无GC async/await集成。
4.UniTask 还提供了异步 LINQ、Channel 和 AsyncReactiveProperty 功能。
5.UniTask 提供了 TaskTracker(Task 追踪器)窗口,用于帮助开发者在运行时监视和诊断 UniTask 的内存泄漏问题。
6.UniTask 提供了对 MonoBehaviour 消息事件和 uGUI 事件的 Await/AsyncEnumerable 支持。
7.UniTask 与 .NET 标准库中的 Task、ValueTask 和 IValueTaskSource 接口具有高度的行为兼容性。

#unitask为什么可以为 Unity 提供有效的无GC async/await集成。
1.Unitask 基于 C# Task 进行开发
2.是因为Unitask 通过优化 Task 的创建和销毁过程,尽可能地减少了 Task 的 Allocation,从而减少了 GC 压力。
3.Unitask 提供了自定义的任务调度器,通过调度器的设置,可以控制任务的执行顺序、优先级和并发度等,从而更好地控制游戏的性能。
4.Unitask 针对 Unity 游戏开发场景进行了优化,比如支持 Unity 主线程的同步调用、支持 Unity 协程的嵌套和调用、支持对 Unity 对象的操作和回收等。文章来源地址https://www.toymoban.com/news/detail-693873.html

• UniTask.OnAnimatorIKAsync(int layerIndex): 当 Animator 执行 IK 动画时调用。
• UniTask.OnAnimatorMoveAsync(): 当 Animator 更新物体的 transform 时调用。
• UniTask.OnApplicationFocusAsync(bool hasFocus): 当应用程序获得或失去焦点时调用。
• UniTask.OnApplicationPauseAsync(bool pauseStatus): 当应用程序暂停或恢复时调用。
• UniTask.OnApplicationQuitAsync(): 当应用程序退出时调用。
• UniTask.OnAudioFilterReadAsync(float[] data, int channels): 当 AudioSource 读取音频数据时调用。
• UniTask.OnBecameInvisibleAsync(): 当该对象从相机视野中消失时调用。
• UniTask.OnBecameVisibleAsync(): 当该对象进入相机视野时调用。
• UniTask.OnCollisionEnterAsync(Collision collision): 当该对象与另一个对象发生碰撞时调用。
• UniTask.OnCollisionExitAsync(Collision collision): 当该对象与另一个对象碰撞结束时调用。
• UniTask.OnCollisionStayAsync(Collision collision): 当该对象与另一个对象持续碰撞时调用。
• UniTask.OnControllerColliderHitAsync(ControllerColliderHit hit): 当该对象与控制器发生碰撞时调用。
• UniTask.OnDisableAsync(): 当对象被禁用时调用。
• UniTask.OnEnableAsync(): 当对象被启用时调用。
• UniTask.OnJointBreakAsync(float breakForce): 当该对象的关节断裂时调用。

到了这里,关于关于UniTask的一些见解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 〖程序员的自我修养 - 认知剖析篇④〗- 关于前端方向与后端方向的一些个人见解

    人之所以会觉得迷茫,本质上是欠缺对自己的一个控制力、识别庞杂信息、去伪存真的独立思考与认知能力。 说明:该文属于 程序员的自我修养 专栏, 购买任意白宝书体系化专栏可加入 易编程社区, 早鸟价订阅模式除外 。 福利:加入社区的小伙伴们,除了可以获取博主

    2024年02月14日
    浏览(56)
  • Unity 关于生命周期函数的一些认识

    Unity 生命周期函数主要有以下一些: Awake() : 在脚本被加载时调用。用于初始化对象的状态和引用。 OnEnable() : 在脚本组件被启用时调用。在脚本组件被激活时执行一次,以及在脚本组件被重新激活时执行。 Reset() : 在脚本组件被重置时调用。用于重置脚本的初始状态。 Start

    2024年01月21日
    浏览(53)
  • 低代码开发的一些见解:何为低代码、优缺点、如何入门及平台介绍

    低代码是一种软件开发方法,它旨在通过最大程度地减少手动编码来加快应用程序的开发速度和降低技能门槛。低代码开发平台提供了一系列工具和组件,使开发人员能够使用图形化界面、拖放式操作等方式来快速构建应用程序,而无需深入的编程知识。 低代码开发平台通常

    2024年02月04日
    浏览(53)
  • Unity中触发器(trigger)个人见解

    在 Unity 3D 中,检测碰撞发生的方式有两种,一种是利用碰撞体,另一种则是利用触发器(Trigger)。 触发器(Trigger)是用来触发事件的 例如:在角色扮演游戏里,玩家走到一个地方会发生出现 Boss 的事件,就可以用触发器来实现。或者构建传送门时,需要触发器完成传送。 触

    2024年02月03日
    浏览(48)
  • 关于工作流开发前端选型的一点个人见解(bpmn.js与LogicFlow)

    掘金2023年度人气创作者打榜中,快来帮我打榜吧~ https://activity.juejin.cn/rank/2023/writer/747323639208391?utm_campaign=annual_2023utm_medium=self_web_shareutm_source=MiyueFE 首先需要明确的一点是,本文的出发点 纯粹是针对工作流开发 的场景的选型对比,其他业务场景下建议重新调研。 什么是工作

    2024年02月20日
    浏览(50)
  • 关于一些代码习惯

    修改完代码,记得自己测试一下 方法入参尽量都检验 修改老接口的时候,要先思考接口的兼容性 复杂的代码逻辑,添加清楚的注释 尽量不在循环里远程调用、数据库操作,要优先考虑批量进行 手动写完业务代码的SQL,先拿去数据库运行一下,同时也explain看下执行计划 调用

    2024年02月21日
    浏览(44)
  • 关于ChatGPT的一些随笔

    大家好,我是老三,最近几个月关于ChatGPT的信息可以说是铺天盖地。 “王炸,ChatGPT……” “xxx震撼发布……” “真的要失业了,xxx来袭……” “普通如何利用ChatGPT……” …… 不过老三前一阵比较忙,对ChatGPT的使用基本只限于一些简单的问答,比如: 可以说是落伍到家

    2023年04月10日
    浏览(43)
  • 关于DNS的一些认识

    目录 什么是DNS? 一台具有单个DNS的机器可以拥有多个地址吗? 一台计算机可以有多个属于不同顶级域的DNS名字吗? 什么是DNS?         DNS是域名系统(Domain Name System)的缩写,它是互联网中用于将域名转换为IP地址的一种系统。在互联网上,每个设备都被分配一个唯一

    2024年02月09日
    浏览(44)
  • 关于推荐场景的一些思考

    由于用户数的飙升,推荐使用的技术栈也在不断升级,以满足更高并发和更大数据量的推荐场景。 推荐相关的原始数据从小几十万到几百万,到几千万,再到上亿。 从全库的用户数据中load出满足条件的用户,在jvm做计算,得到推荐结果。 随着用户数量的上升,满足条件的用

    2023年04月09日
    浏览(47)
  • 关于goland的一些坑

    主要是做个记录,供自己看 注意goland中的GOPATH配置: Global GOPATH直接影响这个项目的终端go env中的GOPATH Use GOPATH that’s define in system environment,勾选意思是:将Global GOPATH作为Project GOPATH index entire GOPATH,勾选:将project GOPATH加入到go env中的GOPATH环境变量中 一般建议是,在创建项

    2024年02月03日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包