协程
WunderMinibar — 让玩变得奇妙吧!
(资料图)
这次要讲的是一个非常有趣的玩意儿,那就是传说中的【协程 Coroutine】。其实在现实生活中我们也有类似协程的概念
可能你会说,携程谁不知道啊,不就是哪个用来订机票订酒店的软件么,这有什么好学的!这样的话你就错了,此协程非彼携程,可不要傻傻分不清楚喽!
来吧,和我一起进入奇妙的世界。
生活中的协程
阿伟不会用协程打电动
今天,阿伟在家打电动玩游戏 "弱诶,拜托你很弱诶!" “现在知道谁才是老大喔” "......"
......
他的阿妈从房间出来看到你又在玩游戏于是说道:"阿伟你又在打电动喔~休息一下吧,看看书好不好"
这时阿伟也在听阿妈的话,但还是玩游戏重要一些。
"烦捏" 阿伟心不在焉的说。
“我在跟你讲话你有没有听到?” 阿妈说。
"你不要烦好不好~" 阿伟不耐烦的说道。
”我才讲你两句,你就说我烦“ 阿妈生气道。
”我只希望你能够好好用功读书,整天就看到你在这打电动“ 阿妈继续说。
”豁~ 死了啦,都你害的,拜托~“阿伟生气的离开了家。
......
这时阿伟和阿妈就产生矛盾了,阿伟也有因此出门离家遇到了杰哥。那我们来帮助阿伟避免产生矛盾,避免遇上杰哥吧。
用协程帮助阿伟打电动
为了不产生矛盾,阿伟想在家里同时玩游戏和学习,但阿妈经常会打扰他,并强烈要求他只专注于学习。为了避免与阿妈的争吵,我们决定使用协程来管理他的学习和游戏时间。
他使用在每隔一段时间自动暂停游戏(阿妈进来查房了),并切换到学习模式,以满足阿妈的期望(阿妈满意离开),然后再返回游戏模式。
这样阿伟既可以享受游戏,也能够专注于学习,同时避免与阿妈的矛盾,也不会出门遇上杰哥了。
这里就有了协程的概念了 ===> "一心二用"。
“一心二用”的协程
“ 阿伟玩游戏,停下一段时间,这段时间去写作业,随后又恢复玩游戏状态。” 这就是传说中的【协程】。
我们的阿伟可以在玩游戏和学习之间轻松切换,并且在各个任务之间没有任何明显的暂停或阻塞。
既然阿伟已经学会了现实生活怎么使用协程来享受游戏又能学习,那我们来用协程代码实现一下吧....
代码中的协程
在代码中:
协程是一种让程序在某个点暂停执行,然后在稍后的时间点继续执行的方法,这种方式可以避免在等待某些操作完成时浪费计算资源。
首先我们要理解做一件事,上面阿伟“即学习又玩游戏” 这个事的逻辑不是说只能用协程代码实现的。而我们用协程的原因是避免浪费计算资源。
虽然不是很严谨,但我们可以把Start函数类似看成一天的开始。程序开始执行了:
起床了开始一天的工作开始了
阿伟起床了,他要去刷牙了
刷完牙后阿伟去吃饭了
吃完饭了阿伟开始写作业了
我们的阿妈每10秒查一次房,查一次房10秒钟。阿伟捉到规律之后,利用发现只要查房的10秒学习,阿妈走后10秒钟空档期玩游戏就能 充分的管理时间,即能好好学习又能充分娱乐,简直时间管理大师。
阿伟是个人要呼吸的,我们给他加入点现实元素让阿伟生动一些吧。
这里的update函数我们可以看成每时每刻都在做的事情(其实是不严谨的,Unity的生命周期函数Start在Update前执行)
于是我们得出了完整的代码逻辑 起床-> 刷牙->吃饭->学习和玩游戏 呼吸穿插其中,总结得出整体代码:
来看看阿伟的学习情况吧,阿妈每10秒查一次房,我们看到阿伟在玩10秒游戏后又学习10秒,这样就完美避开了阿妈的逮捕。同时不影响阿伟呼吸,也有时间呼吸不至于被缺少氧气窒息了。
这里可以看到协程中有重要的东西就是 yield return XXX的。
“啊!看不懂这什么玩意儿啊?” “写的什么乱七八糟的?”
别急吖~ 让我给你细细道来。
yield return
这个yield return xxx 就是将协程暂时挂起,暂停运行。我们的阿妈查房10秒钟,这时候阿伟需要切换学习状态保持10秒钟,就可以躲避啦。这10秒钟阿伟也是可以呼吸的,不影响其他呼吸等主线程的运行。
所以看这个 yield return 就相当于这行下面的代码都不执行了,“什么时候执行呢?”得看return后面的内容咯
阿伟是yield return new WaitForSeconds(10f); 这个意思是10秒钟后再执行。那么阿伟这10秒内就在呼吸和玩游戏或者学习啦。
我们来看看Unity官方对协程的定义:
A coroutine is like a function that has the ability to pause execution and return control to Unity but then to continue where it left off on the following frame. In C#, a coroutine is declared like this:
It is essentially a function declared with a return type of IEnumerator and with the yield return statement included somewhere in the body. The yield return null line is the point at which execution will pause and be resumed the following frame. To set a coroutine running, you need to use the StartCoroutine function:
By default, a coroutine is resumed on the frame after it yields but it is also possible to introduce a time delay using WaitForSeconds:
简单的说,协程就是一种特殊的函数,用StartCoroutine()开启。它可以主动的请求暂停自身并提交一个唤醒条件,Unity会在唤醒条件满足的时候去重新唤醒协程。
用StartCoroutine()开启协程,用 yield return xxx
暂停协程运行(也叫挂起)。
通常用最多的就是 yield return null
就是让协程暂停一帧,下帧继续执行后面代码。
既然我们已经明白协程了,那我们来做点奇妙的事吧。
淡入淡出动画
现在这个场景还没有淡入淡出效果很单调,用户不喜欢
我们来做一下场景切换有渐变的效果吧。
当我们不使用协程时会出现错误的
这段代码很简单:在函数内些一个循环体,让渲染对象的alpha值不断下降趋近目标值。但是函数被调用完成后才返回的,这个函数的一切逻辑都是在一瞬间完成。
也就是说,上述Fade函数的alpha值会在一瞬间变为目标值,如果调用这样的函数,那么我们将会看到场景切换是一瞬间切换,而不是淡入淡出。
要解决也很简单,我们只要使用协程即可
从而 达到 我们想要的 淡入淡出的效果啦!
结尾
非常感谢你能看到这里,我们尽量通过一个小故事简洁阐述了协程的应用场景和意义。
协程能运用的场景还有很多,比如打字机效果、异步加载、定时器等等。
要是你对这些都非常感兴趣赶紧动起来吧,拿起键盘,开始你的游戏开发之旅吧。
这里有一个哔哩哔哩up出的视频教程--->打字机效果<---赶紧动起来吧~
最后的最后
最后让我宣传一下我们的Wunderminibar微信公众号吧,我们会在公众号发表有趣的文章呢!
奇妙小作坊 —— 让玩变得更加奇妙!
关键词:
(责任编辑:黄俊飞)推荐内容
- 微头条丨Unity中的协程
- 天津津门虎VS山东泰山,无惧伤病天津争连
- talkSPORT独家:热刺有意邀请布伦特福德
- 刚刚,天津发布预警!雷雨、大风一会儿就
- 当前速读:校园的秋天作文800字_校园的秋天
- 让撒贝宁回到家乡亲身打卡,TCL空调武汉
- 5月16日河北地区甲醇市场出货一般 视点
- 【全球热闻】阜阳市开展打击和防范经济犯
- A 股市场午后下行:沪指跌 0.6% 失守
- 今日快看!永茂泰(605208)5月16日主力资
- 全球观点:2023年5月16日苯胺动态
- 华为高管警告:这类手机不能撕膜,不然几
- 全球要闻:特瑞斯(834014)2023年一季报
- 观热点:何塞奥蒂戈萨表示当年自己经历的
- 热消息:小学生电表博物馆里学知识
- 武晓莉(关于武晓莉介绍) 天天快消息
- 金融科技之于银行业,如何从“支撑型”走
- 还记得用奶茶救人的消防员吗?他又立功了
- 《新世界》开发商操刀!全新《指环王》主
- 统计局:1-4月全国商品房销售额39750亿元
- 告别“三盆水泼澡”的苦涩,新生活即将开
- 指导价17.99-23.99万元 全新一代别克君
- 昨日行情回顾|当前短讯
- 威途X35和名图新能源怎么选? 哪款车
- 黑猫股份(002068):5月15日北向资金增
- 比赛中曼联队长马奎尔曾经错失了一次绝佳
- 松鼠的特点和爱好_松鼠的特点
- 小米手机被小米账号锁住了怎么办_小米手
- 每日看点!土耳其大选:埃尔多安首轮得票
- 灵活就业人员参保与企业职工参保有什么不
- 圣经箴言1章逐节讲解_圣经箴言妙语
- 汉朝历代皇帝都是谁简介介绍(汉朝历代皇
- 天天视讯!中国电力企业联合会:进口指数
- 杜城社区开展儿童关爱计划之“杜城爱心报
- 焦点观察:这次警告“不同于以往”?专家
- 最新数据:4月VC/PE新设基金数直线大涨,
- 天天关注:造路虎的去造手机了?曝塔塔集
- 兔子爱吃窝边草打一动物生肖(兔子爱吃窝
- apex入库steam教程 简单方便易操作-全球
- 环球快讯:火炬之光无限初火源质怎么获得
- 5月15日国内环己酮市场行情弱势整理 天
- 5月15日 14:18分 华尔泰(001217)股
- 配置变化较大 新款卡罗拉将于5月21日上
- 世界热讯:六年级上册语文第三单元作文400
- 焦点观察:“以前想都不敢想的事”,在崇
- 【独家焦点】欧洲小麦市场:产量前景利空
- 缺钱的FF,会是下一个恒大吗?
- 海南启动防汛防风Ⅳ级应急响应
- 聚焦负电价 | 负电价也能套利 受益者谁?
- 顺义区中小学生生态环保主题演讲比赛成功
- 天天观焦点:不知道你们发现没有?自从房
- 张良点金:黄金等高空,2021是关键!原油
- 天天速看:工事工评丨拒绝“摆烂”,以技
- 结束了!76人抢七出局,哈登创耻辱纪录,
- 光盘行动图片_光盘行动
- 含有节字的诗句以及作者_含有节字的成语
- 控制下属很简单,牢记这5句话,下属不敢
- 清河县王官庄中心小学组织防震应急演练
- 国有大行拟15日集体调降!多家银行突发公
- 武建华(关于武建华介绍)_世界百事通
- 告别“三盆水泼澡”的苦涩,新生活即将开
- 指导价17.99-23.99万元 全新一代别克君
- 昨日行情回顾|当前短讯
- 威途X35和名图新能源怎么选? 哪款车
- 黑猫股份(002068):5月15日北向资金增
- 比赛中曼联队长马奎尔曾经错失了一次绝佳
- 松鼠的特点和爱好_松鼠的特点
- 小米手机被小米账号锁住了怎么办_小米手
- 每日看点!土耳其大选:埃尔多安首轮得票
- 灵活就业人员参保与企业职工参保有什么不
- 圣经箴言1章逐节讲解_圣经箴言妙语
- 汉朝历代皇帝都是谁简介介绍(汉朝历代皇
- 天天视讯!中国电力企业联合会:进口指数
- 杜城社区开展儿童关爱计划之“杜城爱心报
- 焦点观察:这次警告“不同于以往”?专家
- 最新数据:4月VC/PE新设基金数直线大涨,
- 天天关注:造路虎的去造手机了?曝塔塔集
- 兔子爱吃窝边草打一动物生肖(兔子爱吃窝
- apex入库steam教程 简单方便易操作-全球
- 环球快讯:火炬之光无限初火源质怎么获得
- 5月15日国内环己酮市场行情弱势整理 天
- 5月15日 14:18分 华尔泰(001217)股
- 配置变化较大 新款卡罗拉将于5月21日上
- 世界热讯:六年级上册语文第三单元作文400
- 焦点观察:“以前想都不敢想的事”,在崇
- 【独家焦点】欧洲小麦市场:产量前景利空
- 缺钱的FF,会是下一个恒大吗?
- 海南启动防汛防风Ⅳ级应急响应
- 聚焦负电价 | 负电价也能套利 受益者谁?
- 顺义区中小学生生态环保主题演讲比赛成功
- 天天观焦点:不知道你们发现没有?自从房
- 张良点金:黄金等高空,2021是关键!原油
- 天天速看:工事工评丨拒绝“摆烂”,以技
- 结束了!76人抢七出局,哈登创耻辱纪录,
- 光盘行动图片_光盘行动
- 含有节字的诗句以及作者_含有节字的成语
- 控制下属很简单,牢记这5句话,下属不敢
- 清河县王官庄中心小学组织防震应急演练
- 国有大行拟15日集体调降!多家银行突发公
- 武建华(关于武建华介绍)_世界百事通
- 工业品价格上涨动能不足 一季度泰州PPI
- 鹿门歌txt全文下载_鹿门歌txt-世界滚动
- 老牛拉破车慢慢腾腾造句_慢腾腾造句
- 只有百度网页打不开_百度为什么打不开网
- 关于恐龙的资料
- 心酸和辛酸什么区别_心酸 天天热文
- 每日快讯!安昭熙权志龙_安昭熙
- 热消息:尽人皆知是成语吗_尽人皆知出处
- 通用汽车宣布苹果前高管加盟,将担任软件
- 观察:足球切忌“想法太多”,投入比赛才
- 树语TREE_LANG是哪个国家的品牌 什么档
- 少数民族考北大清华加分吗(少数民族高考
- 世界实时:中国-中亚峰会|专家:中国中
- 又一位67岁知名演员病逝!曾出演《西游记
- 狼队击溃WB重夺银龙再称王!KPL再添新荣
- 中科院理化所公众科学日:感受科学的“魔
- 敦煌市2.36万人次享受职工门诊共济保障政
- 焦点速讯:海南旅游季节几月份去最好 几
- 郧西店子镇科技特派员产业一线开“良方”
- 目前使用加密货币抵押品的期货未平仓合约