Unity 2D教程|平台游戏(中)
在上篇2D平台游戏教程中,我们为大家介绍了如何去创建主角及平台,添加物理碰撞和添加键盘及触摸控制等等相关的内容。本篇将继续讲解如何添加角色跳跃、角色坠落及自动生成平台等。
游戏最终效果如下:
打开上篇教程中编写的Controls脚本,加入两个公共变量,分别是bool类型的jump,以及float类型的jumpheight。可以在检视面板中设置jumpheight的值,这里设为8。然后在脚本中加入代码,完善Controls脚本。
此时点击键盘上的空格键,Rushdy就可以跳跃了。与上篇添加移动的方法类似,这里也有一个可以通过Touch脚本来控制的bool变量,用来控制是否跳跃。这次的跳跃仅在角色的Y轴方向赋予了一个向上的添加了加速度,现在将上篇教程编写的Touch脚本拖拽至刚刚新建的“跳跃”按钮上。
完整版Control和Touch脚本可以通过点击[阅读原文]进行查阅。
下面为“跳跃”按钮添加事件触发器,这里只需要一个事件类型“Pointer Down”,响应函数为“Jump”。如果您依旧不了解这里的操作步骤,请查看上篇教程添加触摸控制部分的内容。由于跳跃不需要保持按键按下的状态,一次按下即可触发,所以这里不需要“jumpRelease”这样的函数。
这里可以先禁用触摸控制,只需在层级视图(Hierarchy)中选中Canvas,然后取消勾选检视面板左上方的蓝色框即可。但是在制作移动版本进行打包APK之前,记得要重新勾选该框,启用触摸控制,这样才能在手机上进行流畅地操作。
可以用Raycast来检测角色落地,但更简单的方法是判断角色下方的坐标是否在地面以下。在Controls脚本中新建一个Transform,命名为groundCheck,意为角色下方的坐标,并添加变量以及函数。添加之后,其中一个函数会为角色下方的坐标点指定一个范围,而另外一个则是标记地面的LayerMask,还有一个用来检测是否在地面上。再在Controls脚本中加入一段Fixupdate函数。
具体函数代码请点击[阅读原文]进行查阅。
在层级视图中选中主角,可以看到检视面板上Controls脚本的“Ground Check”字段为“None”,将刚刚新建的游戏对象Check Ground拖拽至该字段。
再次点击主角rushdy,将Controls脚本的radius值设为0.1,并将主角的Tag设为“Player”。下面为地面添加新的层标记,添加名为“Ground”的Layer。在层级视图点击ground对象,从检视面板的“Layers”下拉列表中选择“Add Layer”:
这时点击运行,主角就不能无限跳跃了!
新建C#脚本命名为“Hazard”,主要用于有物体碰撞到障碍物时,就会触发脚本内的OnTriggerEnter2D函数,即在2D碰撞体刚刚发生碰撞触发的方法。通过该函数然后检测该物体是否是主角。如果是,则游戏结束,主角回到起始位置。
然后将障碍物保存成Prefab,再按照您的喜好将障碍物拖拽并放置到场景中。如果层次显示有问题,请调整Prefab的“Order In Layer”属性。您可将该数值设置为玩家与背景的值之间,即让障碍物显示在玩家前方,而在Ground后方。
回到Unity编辑器新建GameObject命名为Start,将其放在每次游戏开始时玩家的起始位置。然后将Harzard脚本绑定到障碍物spikes对象上。
另外还可以加入一些其它障碍物,如随机移动的敌人:
完整版Hazard脚本以及ObjectMove脚本可以通过点击[阅读原文]进行查阅。
另外这里还加入了另一种敌人,它不会结束玩家的生命,但会将玩家推出平台。这两种敌人都需要添加Circle Collider 2D组件,但后者没有“Harzard”组件,并且将其Layer设为“Ground”,这样玩家就可以从其上方跳过。
然后在Harzard脚本中声明GameObject类型变量Explode,并在onTriggerEnter函数中移动主角的代码前面,添加如下代码:
Instantiate(Explode, player.transform.position, player.transform.rotation);
Instantiate顾名思义就是“实例化”,它用来“创建”游戏对象,生成敌人也会用到它。另外还可以在Harzard脚本中加入一些代码让角色死亡效果更流畅。例如为角色死亡的动画加入了等待时间,这样主角在死亡和再次出现之间就有了间隔,不会显得太过突兀。
另外,为了更好的游戏体验,您还要将死亡后的角色设为不可操作的,并且删除所有的动量,以防止再次开始游戏时主角是有加速度的。
下一篇
事实上,教程到此现有的游戏内容已经比较完整了,当然您还可以继续打磨。例如:加入一些音效在玩家移动及死亡时播放,轻微调整相机将“Field of View”设为70,粘贴一些背景图以防平台超出边界,将jumpheight设为8.5让角色跳得更高等等。您也可以根据自己的想法,自由调整这些属性的数值。
最终效果如图:
本次第二篇的内容就到这里,还有更多精彩内容留待下一篇继续讲解。
本文来源于:androidauthority.com
原作者:Adam Sinicki
Unity将于12月14-15日在北京举办Vision VR/AR Summit Asia 2016,精彩内容抢先曝光!
Vision VR/AR Awards 2017亚洲区作品火热征集中!获奖者更有机会前往美国参与颁奖盛会!
Unity Awards 2016最终中奖名单出炉!来看看有什么优秀的游戏吧!