本篇教程将教指导大家使用Unity的2D功能,制作一款2D平台游戏,即通常所说的横版过关游戏。如果您对于Unity的基本操作与概念还不太了解,可以先学习我们此前介绍过的,使用Unity制作3D无尽跑酷游戏的上半部和下半部。

通过本教程的学习,大家将可以了解到Unity在2D方面的功能及操作,了解掌握UI、2D物理及输入控制等相关内容。本教程共分为三部分,今天先为大家介绍上篇。

示例工程下载地址:
davinci8,如果您要查看本帖隐藏内容请回复

准备工作

本教程示例项目使用的Unity版本为5.3.1f1。首先打开Unity新建2D工程,如下图:

161029h77xy7eyxzyyqx7q.jpg
这里将工程命名为“Rushdy Worm”,这也是游戏主角的名称。

添加Sprite

新建工程完成后,您会打开看到编辑器界面如下的编辑器界面:

161029hsajnlnafbfqjnx6.jpg
右键点击Project视图下的Assets,在Assets目录下新建文件夹Sprites,用来存放游戏需要用到的所有图片资源。现在暂时只需两张图,分别是角色图片“rushdy”以及地面图片“ground”:

161029ew0jjluzzbbooxul.jpg
161029nui211v3gcgqulym.jpg
将上面的图片存放于Sprites文件夹下,然后,从Project视图中拖拽两张图片到场景中,。接着,可以在场景视图调整图片的位置、旋转及缩放等属性。

161030kizllbpd5fpf3d5p.jpg
添加物理

在选中层级视图(Hierarchy)选中中的地面“ground”,在检视面板(Inspector)中点击下方的“Add Component”按钮。,然后逐步依次选择“Physics 2D > Box Collider 2D”为地面添加盒式碰撞体。对于不规则图形的碰撞,您还可以选择使用多边形碰撞体“Edge Collider”。

161030arevv3e3ley6eeze.jpg
接下来为主角“rushdy”添加碰撞体步骤,与之前使用与“ground”的操作相同相同的步骤,为主角“rushdy”添加碰撞体。此时主角还没有重力,您可通过再次点击“Add Component”按钮,为主角添加“Rigidbody 2D”组件,为这样主角赋予就拥有物理属性了。点击运行,您便会看到主角从空中落到了地面上。

添加控制脚本

下面为游戏添加一些输入控制的脚本。首先在Assets目录下新建文件夹Scripts,用于放置在游戏中所用到的控制游戏逻辑的全部脚本。然后在Scripts文件夹下新建C#脚本,命名为“Controls”。双击脚本打开脚本编辑器,更改“Controls”代码如下:

[C#] 纯文本查看 复制代码public class Controls : MonoBehaviour { public Rigidbody2D rb; public float movespeed; void Start () { rb = GetComponent<Rigidbody2D>(); } void Update () { if (Input.GetKey(KeyCode.LeftArrow)) { rb.velocity = new Vector2(-movespeed, rb.velocity.y); } if (Input.GetKey(KeyCode.RightArrow)) { rb.velocity = new Vector2(movespeed, rb.velocity.y); } } }
脚本声明了两个公共变量,您可以在编辑器或脚本中进行修改。第一个“rb”是角色的“Rigidbody 2D”组件的引用,“movespeed”则是角色的移动速度。

在Start函数中,需要为“rb”变量赋值。,并在Update函数中,实现左、右方向键的输入,并根据输入为角色添加相应的加速度,也就是给予角色一个向左或向右的动量。

回到Unity编辑器,将Controls脚本拖拽至角色游戏对象“rushdy”上,在检视面板中将脚本的“movespeed”属性值设为“3”。现在点击运行,就可以使用左右方向键来移动角色了。

添加相机移动

将场景中的Main Camera移动至主角下方成为“rushdy”的子对象,这样就能够让相机跟随主角一起移动。使用场景视图左上方的移动工具,将相机移动至主角的中心位置。

161030gfmecmn4nailffg2.jpg
然后选中“ground”对象,使用场景视图左上角的矩形缩放工具,或者直接更改检视面板上的Scale属性,将地面的宽度拉伸至一定长度。

此时点击运行,会发现主角从平台上掉落时会不停地旋转。应该怎么样处理呢?您可以选中“rushdy”对象,在检视面板上展开Rigidbody 2D组件的Constraints,勾选条件“Freeze Position Z”。这样主角在下落时就不会发生旋转了。

另外大家还可以按照自己的喜好添加背景。比如这里我们可以,为游戏添加背景图片“stars”,将背景图片的“order in layer”属性设为-1,这样就会渲染在所有对象的后方。然后将“stars”坐标的“Z”值设为20,并将Main Camera的渲染模式从“Projection”更改为“Perspective”,即设置相机为。这样就为背景添加了深度,角色在移动时,背景移动的速度会相对慢很多。

161030pxxsfvnuv1vtitfb.jpg
添加触摸控制

由于这个游戏最终希望是在移动平台上运行,所以要添加一些适用于移动平台的触摸控制。依次点击菜单项“GameObject > UI > Image”在场景中新建Image。因为场景中原本不存在UI元素,所以,Unity会同时新建一个Canvas用来显示UI对象。

174945j5x26zcx666lbhk2.jpg
将上面的图片拖拽至Image组件的Source Image字段,将Image重命名为“Right”,点击打开检视面板上方的锚点预设置面板(Anchor Presets)。按住alt键点击stretch与bottom对应的右下角。,这可将样将箭头的锚点设为右下角,让其始终显示在屏幕右下角。

利用复制粘贴的方式在场景中新建一个Image,重命名为“Left”,将Scale的“X”值设为-1让箭头翻转显示。同样打开锚店设置面板,将“Left”的锚点设为左下角,让其始终显示在屏幕左下角。

新建一个空的游戏对象命名为“TouchController”,作为放置两个箭头的容器。打开锚点设置面板,将“TouchController”锚点设置为横向拉伸,让它始终保持与屏幕一样的宽度。

161031knnjntalb2djzpan.jpg
然后在Controls脚本中声明两个bool类型的公共变量,moveright及moveleft。并在Update函数中添加以下代码:

[C#] 纯文本查看 复制代码if (moveright) { rb.velocity = new Vector2(movespeed, rb.velocity.y); } if (moveleft) { rb.velocity = new Vector2(-movespeed, rb.velocity.y); }
下一步,新建C#脚本命名为Touch,用来判断主角应该向左走还是向右走。Touch脚本代码如下:

[C#] 纯文本查看 复制代码using UnityEngine; using System.Collections; public class Touch : MonoBehaviour { private Controls player; void Start() { player = FindObjectOfType<Controls>(); } public void LeftArrow() { player.moveright = false; player.moveleft = true; } public void RightArrow() { player.moveright = true; player.moveleft = false; } public void ReleaseLeftArrow() { player.moveleft = false; } public void ReleaseRightArrow() { player.moveright = false; } }
该脚本引用了Controls脚本中的moveright及moveleft变量,并用两个函数分别为它们赋值。moveright和moveleft会用于控制主角的移动方向。

161031wy4te902cejxxaxe.jpg
将Touch脚本拖拽至之前创建的游戏对象“TouchController”上。选中Project视图的“Right”对象,点击检视面板上的“Add Component”按钮,依次选择“Event > Event Trigger”添加事件触发器,然后点击“Add New Event Type”添加两个事件类型,分别是“Pointer Down”和“Pointer Up”,分别在点击图片和松开时触发。

将TouchController游戏对象拖拽至两个事件的对象属性栏,然后就可以选择相应的触发函数了。为“Pointer Down”触发器设置触发函数“RightArrow”,同样的,“Pointer Up”触发器设置触发函数“ReleaseRightArrow”。这样,在进行输入操作后,就会调用相应的函数去更改moveright和moveleft的值。

以同样的步骤设置“Left”对象,并添加触发器与相应的触发函数。

161031ba8d0y2ddlbsysy0.jpg
下面点击运行,就可以通过左右方向键来控制角色移动了。

上篇的内容就介绍到这里,下一篇将继续为大家讲解,如何为主角添加跳跃、降落以及死亡粒子效果等相关内容。请保持关注。

原文连接:How to create a simple 2D platformer for Android in Unity – Part one
原文作者: Adam Sinicki
转载请注明来源:Unity官方中文社区(forum.china.unity3d.com)。请勿私自更改任何版权说明信息。
Unity, 教程, Android, 新手上路锐亚教育

锐亚教育 锐亚科技 unity unity教程