Unity插件 Unitask学习日志
运行环境:
UniTask 功能依赖于 C# 7.0( task-like custom async method builder feature ) 所以需要的 Unity 最低版本是Unity 2018.3 ,
官方支持的最低版本是Unity 2018.4.13f1.
下载地址
https://github.com/Cysharp/UniTask
点击这里可以查阅中文文档

在Unity 2020,2021 中使用UPM下载会找不到,可以使用2022版本的unity可以在upm中找到。
安装方式
下载zip之后解压,

复制Plugins 到Unity项目中即可。

Content
-
使用Unitask 的最低版本是:Unity 2018.4.13f1.
_ = DelayFrame_Test(100);中的_=在 丢弃 符号,不是没有意义的。用于忽略返回值的语法,通常用于那些不需要处理返回值的方法调用,但仍然希望调用该方法。 -
仅仅记录了github中文档的一小部分,文档的后面有“错误处理”,“超时处理”,“进度”,“线程切换” 等。详情请查阅github文档
-
写法是:
private async UniTask 方法名称
{
await 操作
}
private async UniTask<T> 方法名称
{
await 操作
retun 返回值
}
警告
Debug.Log("警告");
永远不应在 ValueTask 实例上执行以下操作:
多次await实例。
多次调用 AsTask。
在操作尚未完成时调用.Result 或 .GetAwaiter().GetResult(),多次调用也是不允许的。
混用上述行为更是不被允许的。
如果您执行上述任何操作,则结果是未定义。
_ = MAKEERROR();
var task = UniTask.DelayFrame(10);
await task;
await task; // 寄了, 抛出异常
如果物体被隐藏, UniTask.WaitUntil(() => stateLock == true) 也会被执行

using Cysharp.Threading.Tasks;
using System;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
adadasd dasda;
private void Awake()
{
GameObject game = new GameObject();
dasda = game.AddComponent<adadasd>();
_ = twaii();
gameObject.SetActive(false);
Debug.Log("1时间:" + Time.frameCount +
",dasda.stateLock 状态是;" + dasda.stateLock +
",NewBehaviourScript .active:" + gameObject.activeSelf);
}
private async UniTask twaii()
{
Debug.Log("2时间:" + Time.frameCount +
",dasda.stateLock 状态是;" + dasda.stateLock +
",NewBehaviourScript .active:" + gameObject.activeSelf);
await UniTask.WaitUntil(() => dasda.stateLock == true);
Debug.Log("3时间:" + Time.frameCount +
",dasda.stateLock 状态是;" + dasda.stateLock +
",NewBehaviourScript .active:" + gameObject.activeSelf);
}
}
using UnityEngine;
public class adadasd : MonoBehaviour
{
public bool stateLock = false;
private void Start()
{
Invoke(nameof(ChanegeState), 2.0f);
}
private void ChanegeState()
{
stateLock = true;
}
}
使用异步发送http请求
将start 换成
private async void Start()
{
Debug.Log("异步的start方法");
_ = DoSomeThing();
_ = GetTextAsync();
Debug.Log("start End");
}
也是可以执行start方法的。
using Best.HTTP;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.Networking;
public class SendRequestByUnitask : MonoBehaviour
{
private void Start()
{
Debug.Log("异步的start方法");
_ = DoSomeThing();//使用webrequst发送请求
_ = GetTextAsync();//使用besthttp发送请求
Debug

最低0.47元/天 解锁文章
1970

被折叠的 条评论
为什么被折叠?



