Unity插件 Unitask学习日志

Unity插件 Unitask学习日志

下载地址

https://github.com/Cysharp/UniTask

点击这里可以查阅中文文档
在这里插入图片描述
在Unity 2020,2021 中使用UPM下载会找不到,可以使用2022版本的unity可以在upm中找到。

安装方式:
下载zip之后解压,
在这里插入图片描述复制Plugins 到Unity项目中即可。
在这里插入图片描述

Content

  1. 使用Unitask 的最低版本是:Unity 2018.4.13f1.
    _ = DelayFrame_Test(100); 中的_= 在 丢弃 符号,不是没有意义的。用于忽略返回值的语法,通常用于那些不需要处理返回值的方法调用,但仍然希望调用该方法。

  2. 仅仅记录了github中文档的一小部分,文档的后面有“错误处理”,“超时处理”,“进度”,“线程切换” 等。详情请查阅github文档

  3. 写法是:

 private async UniTask 方法名称{
await 操作
}private async UniTask<T> 方法名称{
await 操作
retun 返回值
}

全部代码记录

using Cysharp.Threading.Tasks;
using System;
using System.Collections;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Networking;public class UnitaskTest : MonoBehaviour
{public RotateCube goRotateCube;void Start(){Debug.Log("进入start方法");UniTask<string> ssst = DemoAsync();_ = DelayFrame_Test(100);_ = SendGetHttpRequest();_ = WaitUnityPlayerLoop();_ = ReplaceYield();_ = WaitForEndOfFrame();_ = WaitUntilCondition();_ = WaitUntilValueChangedCondition();_ = FooCoroutineEnumerator();Debug.Log("start方法结束");}private void Update(){if (Input.GetKeyDown(KeyCode.O)){goRotateCube.enabled = false;}if (Input.GetKeyDown(KeyCode.I)){goRotateCube.gameObject.transform.localPosition = new Vector3(1, 0, 0);}}private async UniTask<string> DemoAsync(){Debug.Log("Unitask进入 异步");var asset = await Resources.LoadAsync<TextAsset>("fulman");for (int i = 0; i < 500; i++){GameObject.CreatePrimitive(PrimitiveType.Capsule);}Debug.Log("Unitask异步读取文件,创建物体结束");return (asset as TextAsset)?.text ?? throw new InvalidOperationException("Asset not found");}/// <summary>/// 等待100帧/// </summary>/// <returns></returns>private async UniTask DelayFrame_Test(int frameCount){Debug.Log("等待100帧开始" + Time.frameCount);// 等待一个基于帧的延时操作(就像一个协程一样)await UniTask.DelayFrame(frameCount);Debug.Log("等待100帧结束" + Time.frameCount);}/// <summary>/// 异步发送http的get请求/// </summary>/// <returns></returns>private async UniTask<string> SendGetHttpRequest(){Debug.Log("异步发送http的get请求开始");string webText =(await UnityWebRequest.Get("https://github.com/Cysharp/UniTask/blob/master/README_CN.md").SendWebRequest()).downloadHandler.text;Debug.Log("异步发送http的get请求结束" + webText);return webText;}/// <summary>/// 等待一个Unity的生命周期/// </summary>/// <returns></returns>private async UniTask WaitUnityPlayerLoop(){Debug.Log("异步开始等待Unity的一个生命周期,LastInitialization");await UniTask.Yield(PlayerLoopTiming.LastInitialization);Debug.Log("异步结束等待Unity的一个生命周期,LastInitialization");var go = GameObject.CreatePrimitive(PrimitiveType.Capsule);go.transform.position = new Vector3(3, 0, 3);}/// <summary>/// Yield的替代,/// </summary>/// <returns></returns>private async UniTask ReplaceYield(){Debug.Log("UniTask.Yield当前帧数是start:" + Time.frameCount);//等下一帧执行await UniTask.Yield();Debug.Log("UniTask.Yield之后的帧数是end:" + Time.frameCount);Debug.Log("第二个开始");Debug.Log("NextFrame当前帧数是start:" + Time.frameCount);//等下一帧执行await UniTask.NextFrame();Debug.Log("NextFrame等待一帧之后end:" + Time.frameCount);}/// <summary>/// 等待这帧结束后进行操作/// </summary>/// <returns></returns>private async UniTask WaitForEndOfFrame(){Debug.Log("帧开始:" + Time.frameCount);await UniTask.WaitForEndOfFrame(this);Debug.Log("帧结束 :" + Time.frameCount);}/// <summary>/// 某个条件满足的时候触发/// </summary>/// <returns></returns>private async UniTask WaitUntilCondition(){Debug.Log("方块还在转圈");// yield return WaitUntil 替代方案//等待满足于某个条件的时候执行await UniTask.WaitUntil(() => goRotateCube.enabled == false);Debug.Log("方块不转圈啦!!!");}/// <summary>/// 当某个值改变的时候触发/// </summary>/// <returns></returns>private async UniTask WaitUntilValueChangedCondition(){Debug.Log("监听goRotateCube 是否改变位置");//开始监听goRotateCube 的X是否 改变位置await UniTask.WaitUntilValueChanged(goRotateCube, gorotatecube => goRotateCube.transform.localPosition.x);Debug.Log("监听到goRotateCube.transform.localPosition 位置改变");goRotateCube.gameObject.transform.localScale = new Vector3(2, 2, 2);}/// <summary>/// 可以等待一个协程/// </summary>/// <returns></returns>private async UniTask FooCoroutineEnumerator(){await SayHello100Times();Debug.Log("100次hello man说完啦!");}/// <summary>/// 说100次你好/// </summary>/// <returns></returns>private IEnumerator SayHello100Times(){yield return new WaitForSeconds(2);for (int i = 0; i < 100; i++){Debug.Log("hello man");}}//可以等待一个task runprivate async void TaskRunTest(){int resule = await Task.Run(GetRandomNumber);}/// <summary>/// 获取一个随机数/// </summary>/// <returns></returns>private int GetRandomNumber(){int ran = UnityEngine.Random.Range(0, 100990);return ran;}
}

RotateCube 的代码,挂载于方块上,

using UnityEngine;public class RotateCube : MonoBehaviour
{void Update(){// 绕Y轴旋转transform.Rotate(Vector3.up, 50 * Time.deltaTime);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/44552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp小程序使用webview 嵌套 vue 项目

uniapp小程序使用webview 嵌套 vue 项目 小程序中发送 <web-view :src"urlSrc" message"handleMessage"></web-view>export default {data() {return {urlSrc: "",};},onLoad(options) {// 我需要的参数比较多 所以比较臃肿// 获取…

01. 数组篇(进行中......)

一. 前缀和技巧 &#xff08;1&#xff09;前缀和 前缀和技巧适用于快速、频繁地计算一个索引区间内的元素之和。 class NumArray { public:vector<int> preSum; //前缀和数组NumArray(vector<int>& nums) {//preSum[0] 0&#xff0c;便于计算累加和preSum…

Qt图形编辑类使用总结—正在编辑中

Qt的图形编辑通常会涉及以下三个类:QGraphicsView类、QGraphicsScene类及QGraphicsItem类。 QGraphicsView 是构建复杂图形用户界面的强大工具,尤其适用于那些需要动态更新、可交互的2D图形化应用程序,如图表绘制、流程图编辑器、游戏地图显示等等。通过结合使用 QGraphics…

Spring中的工厂模式详解及应用示例

1. Spring中的BeanFactory BeanFactory是一个接口&#xff0c;表示它是一个工厂&#xff0c;负责生产和管理bean。在Spring中&#xff0c;BeanFactory是IOC容器的核心接口&#xff0c;定义了管理Bean的通用方法&#xff0c;如 getBean 和 containsBean。 BeanFactory与IOC容器…

Python编程:如何有效等待套接字的读取与关闭

背景介绍 网络编程是现代应用程序开发的重要组成部分&#xff0c;尤其是在大数据和实时通信的背景下。套接字&#xff08;Socket&#xff09;作为网络通信的核心技术&#xff0c;是开发网络应用程序的基础。在Python编程中&#xff0c;如何有效地等待套接字的读取与关闭事件是…

柔性测斜仪:监测钻孔位移的核心利器

柔性测斜仪&#xff0c;作为一款创新的测量工具&#xff0c;凭借其卓越的设计与性能&#xff0c;在地下建筑、桥梁、隧道及水利水电工程等领域展现出非凡的应用价值。其安装便捷、操作简便、高精度及长寿命等特性&#xff0c;使之成为监测钻孔垂直与水平位移的理想选择。以下是…

算力共享,分布式大模型是什么,模型并行,流水线并行

目录 算力共享,分布式大模型是什么 一、算力共享 二、分布式大模型 AllReduce是什么 原理概述 具体原理 简单例子 模型并行,流水线并行是什么 模型并行 流水线并行 环形通信(如Ring AllReduce)、树形通信(如Tree AllReduce 环形通信(Ring AllReduce) 树形通…

【ComfyUI的API接口调用示例】

ComfyUI的API接口调用示例 本文目的 本文调用接口示例主要指导需要调用ComfyUI的开发者如何调用ComfyUI官方的API接口提交任务、查询历史、获取绘画视频结果等。 阅读本文的前提是你本地已经安装了ComfyUI&#xff0c;并且对工作流绘画和生成视频已经有所了解。注意如图右边栏…

arm架构安装chrome

在ARM架构设备上安装谷歌软件或应用通常涉及到几个步骤&#xff0c;这取决于你要安装的具体谷歌产品&#xff0c;比如谷歌浏览器、Google Play服务或者是其他谷歌开发的软件。下面我会给出一些常见的指导步骤&#xff0c;以安装谷歌浏览器为例&#xff1a; 在Linux ARM64上安装…

常用的三角函数公式

sin ⁡ 2 x cos ⁡ 2 x 1 \sin ^2 x \cos ^2 x 1 sin2xcos2x1 tan ⁡ x sin ⁡ x cos ⁡ x \tan x \dfrac{\sin x}{\cos x} tanxcosxsinx​ cot ⁡ x 1 tan ⁡ x cos ⁡ x sin ⁡ x \cot x \dfrac{1}{\tan x}\dfrac{\cos x}{\sin x} cotxtanx1​sinxcosx​ sec …

零基础做项目---五子棋对战---day02

用户模块 完成注册登录&#xff0c;以及用户分数管理~使用数据库来保存上述用户信息. 使用 MyBatis来连接并操作数据库了 主要步骤: 1.修改 Spring的配置文件,使数据库可以被连接上. 2.创建实体类&#xff0c;用户, User 3.创建Mapper接口~ 4.实现MyBatis 的相关xml配置…

MySQL安全值守常用语句

一、用户权限设置 1、Mysql中用户是如何定义的 用户名主机域 10.0.0.5110.0.0.%%10.0.0.0/255.255.255.0Db01Localhost127.0.0.1 2、用户创建 create user xinjing% identified by 123 3、用户删除 drop user username&#xff1b;username 是要删除的用户名:如 drop user root…

GDidees CMS v3.9.1 本地文件泄露漏洞(CVE-2023-27179)

前言 CVE-2023-27179 是一个影响 GDidees CMS v3.9.1 及更低版本的任意文件下载漏洞。这个漏洞存在于 /_admin/imgdownload.php 文件中&#xff0c;攻击者可以通过向 filename 参数传递恶意输入来下载服务器上的任意文件。 漏洞的根源在于对用户输入的 filename 参数处理不当…

【C++修行之道】string类练习题

目录 387. 字符串中的第一个唯一字符 125. 验证回文串 917. 仅仅反转字母 415. 字符串相加&#xff08;重点&#xff09; 541. 反转字符串 II 387. 字符串中的第一个唯一字符 字符串中的第一个唯一字符 - 力扣&#xff08;LeetCode&#xff09; 给定一个字符串 s &#…

中霖教育怎么样?税务专业可以考哪些证书?

在税务专业领域&#xff0c;专业技能的认证对职业发展至关重要。以下为税务专业相关可以考的证书&#xff1a; 1. 注册税务师资格证书&#xff1a;该证书是税务专业人士的关键资质&#xff0c;使持证者可以从事税务相关工作。 2. 会计职称证书&#xff1a;会计系列证书分为初…

Linux 安装 docker-compose

安装 docker安装 安装docker-compose github安装 版本查询 地址: github地址 选择自己想要安装的版本 修改以下语句版本号 curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compo…

笔记本系统

笔记本更新升级 笔记本购入太早&#xff0c;所用内存只有4G&#xff0c;通过更好内存条升级系统性能 查看电脑支持内存大小 cmd命令输入wmic memphysical get maxcapacity 这串数字就是电脑最大支持内存数值&#xff0c;做除法除两次1024&#xff01;&#xff0c;得出来的…

查看oracle ojdbc所支持的JDBC驱动版本

oracle jcbc驱动的下载地址参考&#xff1a;JDBC and UCP Downloads page 其实上文中对ojdbc所支持的JDBC驱动版本已经有说明了&#xff0c;不过&#xff0c;因为oracle的驱动包很多时间&#xff0c;都是在公司内部私服里上传维护的&#xff0c;上传的时候&#xff0c;可能又没…

flutter 实现AppStore左右滑动

在AppStore中如何实现左右滑动&#xff0c;因为使用PageView会居中显示&#xff0c;不会居左显示&#xff0c;目前没有找到解决方案&#xff0c;我使用的方案是ListView自定义physics实现的。 代码 SizedBox(width: 200,height: 400,child: ListView.builder(scrollDirection:…

Java中实现二维数组(矩阵)的转置

在矩阵运算中&#xff0c;矩阵的转置是一个基本操作&#xff0c;即将矩阵的行变成列&#xff0c;列变成行。在Java中&#xff0c;我们可以通过编写一个方法来实现二维数组的转置。下面&#xff0c;我将详细介绍如何在Java中完成这一任务&#xff0c;并提供完整的代码示例。 编…