【Unity】UniTask(异步工具)快速上手
UniTask(异步工具)
官方文档:https://github.com/Cysharp/UniTask/blob/master/README_CN.md
URL:https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask
优点:0GC,可以在任何地方使用
为Unity提供一个高性能,0GC的async/await异步方案。
优点:
- 基于值类型的UniTask和自定义的 AsyncMethodBuilder 来实现0GC
- 使所有 Unity 的 AsyncOperations 和 Coroutines 可等待
- 基于 PlayerLoop 的任务( UniTask.Yield, UniTask.Delay, UniTask.DelayFrame, etc…) 可以替换所有协程操作
- 对MonoBehaviour 消息事件和 uGUI 事件进行 可等待/异步枚举 拓展
- 完全在 Unity 的 PlayerLoop 上运行,因此不使用Thread,并且同样能在 WebGL、wasm 等平台上运行。
- 带有 Channel 和 AsyncReactiveProperty的异步 LINQ,
- 提供一个 TaskTracker EditorWindow 以追踪所有UniTask分配来预防内存泄漏
- 与原生 Task/ValueTask/IValueTaskSource 高度兼容的行为
-
相关博客:
- https://blog.csdn.net/farcor_cn/article/details/119494954
-
使用案例:
-
等待1s
写入async UniTaskVoid
public async UniTaskVoid Awaittime(){Debug.Log("开始");await UniTask.Delay(1000);Debug.Log("结束延时");}
-
-
相关静态方法
-
UniTask.Delay
延时几秒执行,能选择是以什么update时间来计算。
UniTask.Delay(1000); //延迟1000ms UniTask.Delay(TimeSpan.FromSeconds(1));//延迟1s UniTask.Delay(1000, delayTiming: PlayerLoopTiming.FixedUpdate);//以FixedUpdate的时间来等待 -
UniTask.DelayFrame
延时几帧执行
UniTask.DelayFrame(3);//等待3帧(默认 update循环) UniTask.DelayFrame(3, PlayerLoopTiming.FixedUpdate);//等待3帧(Fixedupdate循环) -
UniTask.Yield()
等待1帧执行,调用即回到主线程执行操作
await UniTask.Yield();//等待update()下的一帧 await UniTask.Yield(PlayerLoopTiming.FixedUpdate);//等待下一次fixedUpdate -
**UniTask.SwitchToThreadPool **
-
UniTask.SwitchToMainThread
用来切换代码是在主线程跑还是线程池里跑await UniTask.Yield(); //之后都在主线程跑 await UniTask.SwitchToThreadPool(); //之后都在线程池跑 await UniTask.SwitchToMainThread(); //之后回到主线程跑yield和SwitchToMainThread区别在于,如果已经是主线程下的话,SwitchToMainThread不会再等待一帧,而yield无论是不是在主线程,都会等待1帧。
-
UniTask.WaitUntil
-
UniTask.WaitWhile
条件等待
private async UniTaskVoid WaitUntils(){Debug.Log("开始");// 等待条件为 true则继续执行,否则等待await UniTask.WaitUntil(() => isActiveAndEnabled);// 在这里可以执行其他逻辑或代码,当 isActiveAndEnabled 为 true 时才会继续执行// 等待条件为 false则继续执行,否则等待await UniTask.WaitWhile(() => isActiveAndEnabled);// 在这里可以执行其他逻辑或代码,当 transform.position.y 不再大于 0 时才会继续执行} -
UniTask.WaitUntilValueChanged
指定对象变化时执行
var str = await UniTask.WaitUntilValueChanged(this.transform,x =>x.position);//第一个参数时判断目标,第二个参数是判断方法的委托。如果这个返回值变的话,即为发生变化。 Debug.Log(str); -
UniTask.WhenAll(List)
同Task.WhenAll()等待所有Task完成后完成,但UniTask版可以返回不同类型的值。private async UniTaskVoid StartAll(){// 创建异步任务列表List<UniTask> tasks = new List<UniTask>();// 向任务列表添加异步操作tasks.Add(DoTask1Async());tasks.Add(DoTask2Async());tasks.Add(DoTask3Async());// 等待所有任务完成await UniTask.WhenAll(tasks);// 所有任务完成后,执行下面的代码Debug.Log("所有任务已完成");}private async UniTask DoTask1Async(){// 异步操作1的代码await UniTask.Delay(1000);Debug.Log("任务1完成");}private async UniTask DoTask2Async(){// 异步操作2的代码await UniTask.Delay(2000);Debug.Log("任务2完成");}private async UniTask DoTask3Async(){// 异步操作3的代码await UniTask.Delay(3000);Debug.Log("任务3完成");} -
UniTask.WhenAny(List)
同Task.WhenAny()等待其中一个Task完成即为完成。 -
UniTask.Create(Function(UniTask))
用异步委托快速生成返回UniTask的异步方法。private async UniTaskVoid Create(){// 创建自定义的异步操作并返回 UniTask 对象UniTask<string> customTask = UniTask.Create(async () =>{Debug.Log("开始自定义异步操作");await UniTask.Delay(1000);Debug.Log("自定义异步操作完成");return "11";});// 等待自定义异步操作完成并获取结果string result = await customTask;// 输出结果Debug.Log($"自定义异步操作的结果:{result}");} -
UniTask.Defer(Function(UniTask))
用异步委托快速生成返回UniTask的异步方法,但在创建时不执行,但在await时才执行。private async UniTaskVoid CreateDefer(){// 创建自定义的异步操作并返回 UniTask 对象UniTask<string> customTask = UniTask.Defer(async () =>{Debug.Log("开始自定义异步操作");await UniTask.Delay(1000);Debug.Log("自定义异步操作完成");return "11";});// 等待自定义异步操作完成并获取结果string result = await customTask;// 输出结果Debug.Log($"自定义异步操作的结果:{result}");} -
UniTask.Lazy(Function(UniTask))
用异步委托生成一个AsyncLazy型对象,在创建时不执行,但在await时才执行。与Defer不同的是这个可以重复await。 -
UniTask.Void(Function(UniTask))
直接启动一个异步委托,不考虑其等待。UniTask.Void(async () => {Debug.Log("aa");await UniTask.Delay(1000);}); -
UniTask.Action/UnityAction(Function(UniTask))
就是将异步委托封装成Action或UnityAction。
-
相关文章:
【Unity】UniTask(异步工具)快速上手
UniTask(异步工具) 官方文档:https://github.com/Cysharp/UniTask/blob/master/README_CN.md URL:https://github.com/Cysharp/UniTask.git?pathsrc/UniTask/Assets/Plugins/UniTask 优点:0GC,可以在任何地方使用 为Unity提供一个高性能&…...
k8s三种常用的项目发布方式
k8s三种常用的项目发布方式 1、 蓝绿发布 2、 金丝雀发布(灰度发布):使用最多 3 、滚动发布 应用程序升级,面临的最大问题是新旧业务之间的切换。 项目的生命周期:立项----定稿----需求发布----开发----测试-----发布 最后测试之后上线。再…...
Nodejs搭配axios下载图片
新建一个文件夹,npm i axios 实测发现只需保留node_modules文件夹,删除package.json不影响使用 1.纯下载图片 其实该方法不仅可以下载图片,其他的文件都可以下载 const axios require(axios) const fs require(fs) var arrPic [https:…...
强化学习在生成式预训练语言模型中的研究现状简单调研
1. 绪论 本文旨在深入探讨强化学习在生成式预训练语言模型中的应用,特别是在对齐优化、提示词优化和经验记忆增强提示词等方面的具体实践。通过对现有研究的综述,我们将揭示强化学习在提高生成式语言模型性能和人类对话交互的关键作用。虽然这些应用展示…...
python_selenium_安装基础学习
目录 1.为什么使用selenium 2.安装selenium 2.1Chrome浏览器 2.2驱动 2.3下载selenium 2.4测试连接 3.selenium元素定位 3.1根据id来找到对象 3.2根据标签属性的属性值来获取对象 3.3根据xpath语句来获取对象 3.4根据标签的名字获取对象 3.5使用bs4的语法来获取对象…...
面试宝典进阶之关系型数据库面试题
D1、【初级】你都使用过哪些数据库? (1)MySQL:开源数据库,被Oracle公司收购 (2)Oracle:Oracle公司 (3)SQL Server:微软公司 (4&#…...
Agisoft Metashape 地面点分类参数设置
Agisoft Metashape 点云分类之地面点分类参数设置 文章目录 Agisoft Metashape 点云分类之地面点分类参数设置前言一、分类地面点参数二、农村及城区有房屋地区二、植被区域分类三、侵蚀半径(Erosion radius)参数设置前言 Agisoft Metashape提供了自动检测地面点的功能,减少…...
计算机科学速成课【学习笔记】(4)——二进制
本集课程B站链接: 4. 二进制-Representing Numbers and Letters with Binary_BiliBili_哔哩哔哩_bilibili4. 二进制-Representing Numbers and Letters with Binary_BiliBili是【计算机科学速成课】[40集全/精校] - Crash Course Computer Science的第4集视频&…...
数据库开发工具Navicat Premium 15 mac软件特色
Navicat Premium 15 mac版是一款数据库开发工具,Navicat Premium 15 Mac版可以让你以单一程序同時连接到 MySQL、MariaDB、SQL Server、SQLite、Oracle 和 PostgreSQL 数据库。 Navicat Premium mac软件特色 无缝数据迁移 数据传输,数据同步和结构同步…...
从零开始构建区块链:我的区块链开发之旅
1.引言 1.区块链技术的兴起和重要性 区块链技术,作为数字化时代的一项颠覆性创新,已经成为当今世界最令人瞩目的技术之一。自比特币的问世以来,区块链技术已经从仅仅支持加密货币发展成为一种具有广泛应用前景的分布式账本技术。其核心优势…...
c JPEG编码,但有错误
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #include <linux/videodev2.h> //v4l2 头文件 #include <strin…...
二级C语言备考1
一、单选 共40题 (共计40分) 第1题 (1.0分) 题号:6923 难度:较易 第1章 以下叙述中正确的是 A:C语言规定必须用main作为主函数名,程序将从此开始执行 B:可以在程序中由用户指定任意一个函数作为主函数…...
【2024系统架构设计】 系统架构设计师第二版-嵌入式系统架构设计理论与实践
目录 一 嵌入式系统软件架构的原理 二 嵌入式系统软件架构的设计方法 三 案例分析 一 嵌入式系统软件架构的原理 🚀嵌入式系统的典型架构可以分为...
用python提取word中的所有图片
使用word中提取的方式图片会丢失清晰度,使用python写一个脚本,程序运行将弹出对话框选择一个word文件,然后在弹出一个对话框选择一个文件夹保存word中的文件。将该word中的所有图片都保存成png格式,并命名成image_i的样式。 程序…...
医疗器械分类及是否需要临床
1、医疗器械的分类: 在中国,医疗器械的管理分为一类、二类和三类,这是根据《医疗器械监督管理条例》的规定划分的。不同类别的医疗器械受到不同的监督和管理,包括注册审批、生产质量监督、市场监管等方面。 一类医疗器械&#x…...
AI人工智能虚拟现实行业发展分析
AI人工智能和虚拟现实是当今科技领域最受关注和研究的两个领域。这两项技术的迅速发展给各行各业带来了巨大的变革和机遇。在过去的几年里,AI和虚拟现实已经取得了显著的进展,并且有着广阔的发展前景。 AI人工智能作为一种模拟人类智能的技术࿰…...
3. SPSS数据文件的基本加工和处理
如何获取SPSS自带的案例数据文件? 首先找到SPSS的安装目录,然后找到Samples文件夹 可以看到有不同语言版本,选择简体中文 就能看到很多.sav文件 数据文件的整理 个案排序 单值排序 例:对于下面的数据集,将工资按…...
Ubuntu20二进制方式安装nginx
文章目录 1.下载nginx安装包2.安装nginx3.安装出现的问题及解决方案错误1:错误2:错误3: 4.常用命令5.知识扩展: 1.下载nginx安装包 nginx官网:http://nginx.org/en/download.html 选择稳定的nginx版本下载。 2.安装ngi…...
window mysql5.7 搭建主从同步环境
window 搭建mysql5.7数据库 主从同步 主节点 配置文件my3308.cnf [mysql] # 设置mysql客户端默认字符集 default-character-setutf8mb4[mysqld] server-id8 #server-uuidbc701be9-ac71-11ee-9e35-b06ebf511956 log-binD:\mysql_5.7.19\mysql-5.7.19-winx64\mysql-bin binlog-…...
MCU、MPU、SOC简介
文章目录 前言一、MCU二、MPU三、SOC总结 前言 随着处理器技术的不断发展,CPU(Central Processing Unit)的发展逐渐出现三种分支,分别是MCU(Micro Controller Unit,微控制器单元) 和MPU(Micro Processor Unit,微处理器…...
League Akari:英雄联盟玩家的终极智能助手,5大核心功能全面解析
League Akari:英雄联盟玩家的终极智能助手,5大核心功能全面解析 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为…...
Flutter 告别 Rosetta:揭秘 iOS 工具链原生适配 M 芯片的“折腾”史
如果你是 macOS 用户,一定对 Apple Silicon(M1/M2/M3)的性能赞不绝口。但在光鲜的背后,很多底层开发工具其实一直在靠 Rosetta 2 偷偷「苟延残喘」。今天,我们通过复盘近期 Flutter 官方的一个核心 PR,来看…...
开源数字白板the-board:基于React+Fabric.js的实时协作技术解析
1. 项目概述:一个开源的“数字白板”能做什么?最近在GitHub上看到一个挺有意思的项目,叫the-board。乍一看名字,可能觉得平平无奇,但点进去你会发现,它其实是一个功能相当完整的在线白板应用。简单来说&…...
markdownReader:终极Chrome插件,让本地Markdown文件阅读体验提升300%
markdownReader:终极Chrome插件,让本地Markdown文件阅读体验提升300% 【免费下载链接】markdownReader markdownReader is a extention for chrome, used for reading markdown file. 项目地址: https://gitcode.com/gh_mirrors/ma/markdownReader …...
上古卷轴5天际整合包下载最新全热门MOD整合(画质+人物+功能+场景全美化)下载分享
一、整合包基础概况 新手向懒人专属整合资源,适配电脑Windows系统。整合包集成多款热门优质MOD,无需玩家单独下载模组,整合包整体兼容性强,适配主流家用电脑,官方提前做好模组适配优化,规避多数模组冲突问…...
美政府AI主管:Anthropic 将在 18 个月内成为人类历史最有价值公司
Anthropic 已经成为人工智能革命中最成功的案例之一,但这或许还不是全部。风险投资家兼美国政府人工智能和加密货币沙皇大卫萨克斯在 All-In播客节目中提出了一个惊人的说法:Anthropic 不仅有望成为科技界最强大的公司,而且有望成为人类历史上…...
英雄联盟专业视频编辑器:用League Director制作电影级游戏录像的完整指南
英雄联盟专业视频编辑器:用League Director制作电影级游戏录像的完整指南 【免费下载链接】leaguedirector League Director is a tool for staging and recording videos from League of Legends replays 项目地址: https://gitcode.com/gh_mirrors/le/leaguedir…...
【JSON-RPC远程过程调用组件库】测试报告
RPC 框架测试报告一、项目背景 本项目是一个基于 C 实现的轻量级 RPC(远程过程调用)框架,旨在解决分布式系统中服务间通信的复杂性。框架提供三大核心能力:基础 RPC 远程调用(同步/异步/回调三种模式)、基于…...
英雄联盟玩家必备:5分钟快速上手LeagueAkari完整教程
英雄联盟玩家必备:5分钟快速上手LeagueAkari完整教程 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟繁琐的操作流程…...
WarcraftHelper:魔兽争霸3兼容性修复终极解决方案
WarcraftHelper:魔兽争霸3兼容性修复终极解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典游戏魔兽争霸3在现代Windows系…...
