上周为大家分享的Unity 2D平台游戏前两篇教程中,我们已学会了如何使用Unity来制作基本的2D平台游戏,实现了可以通过键盘及触摸屏进行控制的角色,添加了基本物理、主角坠落、死亡特效以及与障碍物的交互等。最后这篇将添加一些收集对象、音乐、动画及关卡,来进一步完善这个小游戏。
上篇:Unity 2D教程|平台游戏(上)
中篇:Unity 2D教程|平台游戏(中)

下载示例工程(请回复本帖哦):

davinci8,如果您要查看本帖隐藏内容请回复

添加音乐

在Assets目录下新建文件夹“Audio”,并将.MP3格式的音乐文件放在该文件夹下。然后将.MP3文件拖拽至主角游戏对象“rushdy”上,并勾选“Play On Awake”及“Loop”。

014349n76je2z77jokakz6.png


细微调整

然后对项目进行一些小调整,首先更改主角Rigidbody组件的一些属性设置为如下:
Gravity Scale: 2 Angular Drag: 13 Jumpheight: 12 Movespeed: 4


更改属性后Rushdy反应将更灵敏,控制起来也更好玩。然后更改用于触摸控制的按钮大小,以更适应触摸屏的操作。最后在“File > Build Settings > Player Settings > Resolution and Presentation”设置下,取消勾选垂直方向,以保证游戏是横版显示的:

014350z30tkgzr7ed9pt8g.png

如果检视面板过于杂乱,可以新建游戏对象“Platforms”及“Hazards”作为分组节点,分别用于存放平台及障碍物。

加入收集对象

下面加入一些收集对象(水晶),新建Sprite命名为“Crystal”,使用下图:

014554o8v8oephiittddxi.jpg

为“Crystal”添加PolygonCollider 2D组件,并勾选“Is Trigger”将其设为触发器。调整“Order In Layer”属性,保证让其永远显示在前方。然后将“Crystal”保存为Prefab。如果对这里的步骤不太了解,请先阅读前面的上篇及中篇教程。

新建GameObject命名为“collectibles”,用来存放所有的“Crystal”收集对象。选择您喜欢的音效拖拽到“collectibles”,在玩家收集水晶时播放。

在“Controls”脚本中新建公共变量crystals,int型,用来表示收集的水晶数量。然后新建脚本“Crystals”,与上篇教程中的“Hazard”脚本类似,区别在于玩家与水晶碰撞时,消失的会是水晶,并且将玩家对象的crystals值加1。“Crystals”脚本代码如下:

[C#] 纯文本查看 复制代码public class Crystals : MonoBehaviour { private Controls player; public AudioSource bling; void Start () { player = FindObjectOfType<Controls>(); } void Update () { } void OnTriggerEnter2D(Collider2D other) { if (other.tag == Player) { Destroy(gameObject); bling.Play(); player.crystals++; } } }

将“Crystals”脚本绑定到对应的Prefab上,并将刚刚新建的“collectibles”对象拖拽至“Crystals”脚本的AudioSource字段中。保存后就可以随意在关卡中放置收集对象了。

加入分数显示

此时还需要创建UI来显示玩家收集的水晶数量。依次点击菜单项“GameObject >UI > Text”新建文本对象,然后设置Text的锚点将其固定在屏幕左上角。在检视面板中设置文本为“Crystals: 0”,并调整字体到合适的大小。

014351awzm10we3o48dee2.png

再次新建脚本“Score”用来显示分数,将脚本绑定到刚刚新建的文本对象上。脚本代码如下:

[C#] 纯文本查看 复制代码using UnityEngine; using System.Collections; using UnityEngine.UI; public class Score : MonoBehaviour { Text text; private Controls player; // Use this for initialization void Start() { text = GetComponent<Text>(); player = FindObjectOfType<Controls>(); } void Update () { text.text = Crystals: + player.crystals; } }

注意上面的代码引入了UnityEngine.UI命名空间,以便使用UGUI对象。上面的脚本仅用来更新文本对象显示的分数。

014351qnsspb8qsg0mokbk.png

为主角添加动画

目前主角的移动还不是很自然,下面为主角加入一些动画。首先添加两张图片:

014351mnvjatua3345jnua.png014351weyy3o9gonsbzoom.png

将这两张图加入场景,然后打开“Animation”窗口,可以看到其中的“Create”按钮。点击按钮即可创建动画,命名为“Idle”,然后系统会在Assets目录下自动生成包含该动画文件的文件夹“Animations”。

接着会看到Animation窗口下Idle右侧出现了两个小箭头,点击箭头后选择“Create New Clip”新建另一个动画“Walking”,使用两个小箭头可以快速切换这两个动画。

014352fsdlvlvd2br9fsmu.png

Animation窗口上会出现时间轴,用来调整动画对象的关键帧。Idle动画的关键帧是第一帧显示Rushdy,在1:30处将Rushdy设为半透明,然后再过几秒恢复正常。以同样的步骤设置Walking动画,中间的关键帧将Rushdy的Y轴缩小,让它显得比较“矮”,这样会有一个弹跳的效果。

014352f92c9e224ln4n2lc.png

打开“Animator”窗口会看到类似图表的窗口,目前的箭头指向是“Entry”到“Idle”,表示“Idle”是当前的默认动画。这里“Idle”和“Walking”都表示一种状态(由于目前动画非常简单,所以还无需用到Any State)。右键点击“Idle”选择“New Transition”,会新建箭头,拖拽箭头让其指向“Walking”。

设置好后点击“Animator”窗口上的“Parameters”,会看到“+”按钮,点击按钮新建bool型变量命名为Walking:

014352lmjf29zj5rtmf2er.png

下面在“Control”脚本中加入Animator变量,命名为anim:

[C#] 纯文本查看 复制代码private Animator anim;

并在Start函数中加入以下代码:

[C#] 纯文本查看 复制代码anim = GetComponent<Animator>();

在Update函数中判断当前是否位于移动或落地状态,如果是,则将此前在Animator中声明的Walking变量设为true,播放“Walking”动画;反之则为false,播放“Idle”动画。代码如下:

[C#] 纯文本查看 复制代码if (rb.velocity.x != 0 onGround) { anim.SetBool(Walking, true); } else { anim.SetBool(Walking, false); }

回到“Animator”窗口,打开检视面板上的“Conditions”选择“Walking”设为“true”,表示当Walking变量为“true”时就开始播放动画。取消勾选“Has Exit Time”,以免在动画还未播放结束就切换状态。

014353oqdkxw1k311utwzs.png

然后重复以上步骤,添加从“Walking”切换回“Idle”的状态转换。到此主角的动画就完成了,当然您还可以自由发挥,为敌人和物体也添加一些动画。

添加道具和关卡

将分数文本对象显示的默认文本改为“Crystals: 0 / 41”,在关卡中加入21个水晶。要想收集所有水晶,玩家必须对移动路线进行准确地预判。所有水晶成功收集后,就可以进入下一关了!

点击“File > New Scene”新建场景,利用之前创建的Prefab搭建新关卡的场景,也可以直接复制第一关的场景,在此基础上进行调整。编辑完成后保存新关卡,命名为“level2”。

014353swmdgibt0innean6.png

下面在“Controls”脚本中添加顺利通过第一关后跳转到第二关的场景转换代码(通常会有专门的场景管理脚本)。这里的过关条件是集齐41个水晶,所以代码如下:

[C#] 纯文本查看 复制代码if (crystals == 41) { Application.LoadLevel(level2); }

请注意,在Unity最新版本中请使用SceneManager来切换场景。

最后在构建APK包时,记得在Build Settings中勾选所有关卡。现在这个2D平台游戏就比较完善了,赶紧动手试试吧!

结论

014354h2jv0wgwaoj2gwjo.jpg

这是个非常简单的2D游戏教程,但也包含了大量的Unity基础操作与脚本的概念。希望通过本教程的学习,大家对Unity以及平台游戏都有了基本的了解。当然还可以在此基础上继续改造,例如将主角设为自动向右前进的,就可以直接改造为之前为大家介绍过的无尽跑酷游戏。欢迎大家自由发挥想象力,创造出属于独一无二的玩法!

上篇:Unity 2D教程|平台游戏(上)
中篇:Unity 2D教程|平台游戏(中)

原文链接:http://www.androidauthority.com/create-a-2d-platformer-for-android-in-unity-part-3-695540/
原文作者:Adam Sinicki
转载请注明来源:Unity官方中文社区(forum.china.unity3d.com)。请勿私自更改任何版权说明信息。 Unity, Unity 2D, 游戏, 教程

2.png(87.31 KB, 下载次数: 4)

 

014350c840z4d2d4caxd4k.png锐亚教育

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