Unity中的异步编程【1】—— Unity与async 、 await

本文介绍了如何在Unity中避免Update阻塞,通过 UniTask库实现异步操作,包括async和await的概念解析,以及如何用 UniTask解决定时任务和发动机控制场景。重点讲解了 UniTask的优势和在WebGL环境下的适用性。

新手在Unity里写东西,一个方法的内容如果写复杂了,容易把Uinty写死,就会卡帧,用流行的话来总结就是:在Update里面活生生把天聊死了。

此外,如果新手才入门,不擅长使用消息、事件来进行异步的统筹,一门心思在Update里面实现各种有延时有顺序的步骤,于是自己把自己绕晕不说,程序又难调试,难修改,更甚——帧率低下…

那么用协程来实现异步…聪明…

但,还有比协程更好用的异步框架,那就是UniTask


一、什么是异步:async和await是啥

异步这个概念一言难尽,里面涉及到很多上古时候的知识:单核/多核,单线程/多线程,并发/并行,阻塞/非阻塞…

举一个例子:
小赵夫妻响应祖国的号召,夫妻二人7年之内哗啦啦生了3个娃娃。对这对夫妻来说,他们生娃只能一胎一胎的生,所以小赵家生三娃这件事情就是单线程,而且是阻塞式的。
又过了几年,人们纷纷进城,村里的人越来越少,于是大家响应号召要多多生娃,特别是赵庄的赵太爷在县太爷面前拍了胸脯:2年之内,我们赵庄要增加100个新生儿。
于是赵太爷在村里做了动员,大伙儿也积极响应,纷纷备孕。于是赵庄生100个娃这件事情变成了多线程,而且是非阻塞的(大家一起生——这叫多线程,张家怀孕不会影响李家怀孕——这叫非阻塞)。

二、C#(.Net)中的异步

.Net自C#5开始,大概2012年前后,开始引入了异步编程(async和await),有了异步之后,很少需要手动去开线程了,而且业务更好理解,代码更加清晰。

同步举例:解放前的辛家庄有十户人,他们共用一个灶做饭,于是只能轮着顺序做饭…

在这里插入图片描述
以上做饭的总耗时为10

代码清单

using System;
using System.Threading.Tasks; //关键的包

public static void Cooking(int i ){
   
   
    Console.WriteLine($"第{
     
     i}户家庭开始做饭...");     
    Task.Delay(1000).Wait();
    Console.WriteLine($"第{
     
     
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值