Unity初识之StartCoroutine

写tutorial的时候,遇到一个情况,就是移动所有怪物的时候,需要有一个移动的操作,而这里当轮到自己或者小怪走的时候,需要在一个代码段里,让执行逻辑等这个移动动画做完之后再去继续。

以前的做法是,比如遍历一遍所有小怪,在播放一个小怪动画的时候,delay一段时间,然后回调,播放第二个,以此类推。

这里可以用协程的概念去减少之前那种做法的控制逻辑代码。

Unity初识之StartCoroutine_第1张图片

在移动的时候,需要让小怪挨个动。可以通过携程完成,就是等一段时间,再进行下一个的移动,但是不阻塞外面的代码执行

Unity初识之StartCoroutine_第2张图片

eg:

Unity初识之StartCoroutine_第3张图片

Unity初识之StartCoroutine_第4张图片

输出结果就是,保证了testInit中是不阻塞的,然后,开启了携程之后,他们做他们的,通过delay时间,可以保证迭代块里的顺序执行完,再执行迭代快下面的代码.


在官方的tank3d的游戏中,用协程来做了主游戏回合逻辑。由于游戏是回合制的。在游戏开开始,就启动一个协程。

Unity初识之StartCoroutine_第5张图片

起了协程之后,如果协程的函数中有delay的情况,不会阻塞正常的逻辑update .这里的游戏回合逻辑完全是自己在玩儿了。跟外面游戏引擎每帧做的事隔离开了。引擎每帧的渲染,碰撞检测,输入控制等不会受到影响。

Unity初识之StartCoroutine_第6张图片

在协程中,做游戏一个回合中的几步。

回合开始时候,初始化属性,坦克位置等。并且delay一段时间。当RoundStarting里的东西做完后,返回到yield位置,进行下一个步骤,RoundPlaying

Unity初识之StartCoroutine_第7张图片

这时候完全是游戏里开始玩了,而这个while循环会一直进行,一直在判断这回合是否需要结束,当结束时,跳出while循环,回到yield return的位置。进行RoundEnding();

Unity初识之StartCoroutine_第8张图片

Unity初识之StartCoroutine_第9张图片

RoundEnding处理完一些设置后,展示delay一段时间,回到yeild return的地方, 然后循环开始下一回合的协程开始。

你可能感兴趣的:(unity初识,Unity初识)