承接上一篇:【Unity项目实战】手把手教学:飞翔的小鸟(5)背景滚动,我们已经让主角在停止不动的情况下,移动背景图,使得主角小鸟像是自己往前移动了一样,接下来我们将继续往下,讲解如何添加障碍。

一.添加障碍物柱子

将障碍物素材(拉两个)拖拉到主界面中去,然后调整这两个障碍物的位置:

我的两个障碍物的位置如下:

下面的柱子位置参数如下:

上面的柱子位置参数如下:

当然,你也可以自己调整柱子之间的空隙,以免过窄导致小鸟过不去,或者太宽没有挑战性,调整好位置之后,再分别在两个柱子里添加一个碰撞检测器(绿色边为检测器范围),用以检测小鸟是否碰撞到柱子:

碰撞器的范围也是按照自己的喜好进行设定,注意范围要适中,两个柱子都要添加碰撞检测器,这里就举例其中一个例子:

添加完成后,新建一个空对象(命名为Columns),把这两个柱子障碍物全部拉到这个对象里面,作为一个整体,如此,一个简单的障碍物就完成了。

需要注意的是,空对象也有自己的坐标,所以在拉柱子障碍物进来之前,需要把空对象的最表全部修改为0,再把柱子障碍物拉进来,不然就会发生位置偏移!!(你可以试试不改空对象的坐标位置拉入柱子障碍物后再看看两个柱子的坐标)

二.添加计分检测器

因为小鸟安全通过两个柱子之间后,就需要计算分数,所以需要在两个柱子之间添加一个碰撞器,用来检测小鸟是否已经经过了柱子,我们直接选中Columns对象,在配置里面添加一个盒型碰撞器(设置为触发器):

位置和大小按照自己的喜好来,我的设置如上。设置完成后,为了测试柱子的合理性,我们可以将柱子拖拉到右边去,然后点击运行,查看柱子的反应:

当游戏运行起来后,你就会发现,柱子和小鸟一起“静止”在当前界面了,所以我们还需要在Columns对象中添加一个物理特性,使得柱子对于小鸟来说是“运动”的:

然后再添加一个固定脚本:

三.障碍物脚本编写

首先我们来编写游戏得分函数,每当小鸟越过柱子之后,游戏控制就应该自动加上一分,并且在下方的“SCORE”文本中更新分数,所以我们先在以前的脚本“GameControl”中添加一个得分函数,新建一个全局变量用来计算分数:

紧接着我们加个判断,游戏一旦结束,就不要计算分数了,否则将继续计算分数:

下一步,因为我们要让界面的分数及时更新,所以需要用到Unity的UI库,并且定义一个全局变量用以更新界面文本:

得分函数完成后,我们就得让柱子对象来判断,小鸟如果经过了柱子,就调用这边的得分函数,所以我们需要在Columns对象下新建一个脚本(命名为columns):

在脚本中,当碰撞器检测到有小鸟刚体触碰到触发器时,立马调用得分函数更新界面分数:

下一步,我们保存下脚本,并且切换回unity主界面,将主界面上的分数文本拖拉到GameControl脚本里面,形成部内连接,让GameControl脚本里面的SoreText全局变量与主界面上的分数文本绑定:

全部都搞完后,我们保存下,直接点击运行,你就会发现,小鸟在经过柱子之后,分数真的更新了一分!恭喜你!你已经完成了整个项目的80%的内容,在最后一章里面,我将讲解最后一点内容,也是最最复杂的一个部分,就是怎么才能让柱子障碍物在随机无限刷新,并且销毁物体。