前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Unity】瞎做个宝石迷阵吧!(2)——砖块交换

【Unity】瞎做个宝石迷阵吧!(2)——砖块交换

作者头像
ZifengHuang
发布2020-07-29 15:26:36
5750
发布2020-07-29 15:26:36
举报

接上篇【Unity】瞎做个宝石迷阵吧!(1)——构建场景

我们在成功生成盘面后,来试试看让砖块交换吧。

首先我们在Bricks里加入这样几个变量

我们要利用这几个变量来控制砖块的交换,先来做砖块的动画效果。在Bricks的Update里将代码改成这个样子,我们所需object在每帧要做出的变换我们都要写在Update里,这里插入说一下Update系列函数。Update是每帧调用一次,FixedUpdate是每固定间隔时间调用一次(用于物理演算),LateUpdate是在每帧中接近最后的时候才进行调用。这里的_end变量是下次要用到的表示砖块消除用的变量,先声明着就好。

在Update里,Mathf.Lerp可以按比率平滑变化一个数,Vector3.MoveTowards可以平滑改变物体的坐标达到目的地,transform.Rotate可以让物体按设定的速率来旋转。

接着,我们要写几个函数方便其他类对这个类里的函数进行调用。在刚才上面我们写了 private Scene controller; 这一句,通过这句声明,我们就可以调用到特定的Scene类的公共函数了。

我们先在Bricks里面加入这样的代码。

这里的StartCoroutine中文名叫协程,是一种可以由时间,帧数等变量控制执行时间的子程序,常常用来做一些需要由计时来执行的操作。可以简单理解为自带一个计时器的函数。用好协程对Unity非常重要。这个协程我们待会会详细见到。这两个函数主要是控制砖块进入“被选择”状态。在被选择时,砖块会开始旋转表示,并发送自己的信息给我们的controller。当然,有被选择状态就也要有取消选择旋转的办法。我们再在Bricks加入以下两个小函数来停止旋转就好。

这里的control变量是用来控制整个Bricks运行的,也是常用的变量。

紧接着我们来看看这几个函数在Scene中的实现。先加入这两个变量到Scene中,在声明一个Boom函数。

这里和下面我们看到的IEnumerator便是协程函数的类型符。如下面的Choose函数,协程函数的必要返回值为 yield return new **** 。通过返回一个可表示时间的数值(waituntil也是一种)可以让这个函数运行到yield时,等待那个时间,然后再继续执行,从这一个协程看起来,有一点像我们C++中的System.Sleep()函数,都是等待的作用。协程非常有用,还是有必要详细看看的。

这个Choose函数我写的比较乱,不要在意。理论上,这些东西写完后再去运行游戏,应该可以看到我们可以让砖块相互交换了。然后下期(做个好梦)里再来说宝石的消除问题。

关于协程的一些东西:

  1. yield return null可以让协程只等待一帧
  2. StartCoroutine函数是立刻返回的,但是yield可以延迟结果。直到协同程序执行完毕。(官方解释)
  3. StartCoroutine中可以再嵌套一个yield return StartCoroutine,第一个StartCoroutine会等到第二个StartCoroutine中所有代码结束后再继续执行,这也是一种用法
  4. 协程也可以理解为一个小小的Update,在协程中也可以用Time.deltaTime,善用协程可以让程序的Update函数变得更简洁易懂(我这篇文章几乎都是范例hhh
  5. 下面简单给出Unity的简要生命周期顺序,熟记顺序才能解决一些莫名奇妙的bug哈哈哈
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未竟东方白 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档