unity官方教程合集游戏编程研究院Unity3D

Unity官方实例教程 Space Shooter(五)

2015-11-17  本文已影响15066人  Zui
Space Shooter 太空射击

传送门

Unity官方实例教程 Space Shooter(一)
Unity官方实例教程 Space Shooter(二)
Unity官方实例教程 Space Shooter(三)
Unity官方实例教程 Space Shooter(四)
Unity官方实例教程 Space Shooter(五)

前言

游戏截图

Unity官方实例教程 Space Shooter(四)中,我们学会了:

从现在的游戏功能来看,我们已经具备了基本的玩法了,但是总觉得少了什么,少了什么呢?游戏是无声的,这样怎么能够体现我们太空射击的激烈呢?所以我们接下来给我游戏添加一些惊心动魄的音乐,让玩家一开始就能感受到宇宙的宏伟气势!

你将学到什么?

一、添加背景音乐

在Unity中,要添加背景音乐其实是一件很简单的事情,我们只需要将我们的音频文件挂载一个GameObject上,然后做一些设置就可以让其播放了,对于游戏的背景音乐,我们可以新建一个空的GameObject来进行挂载,但是在本例中,我们直接将音乐挂载在GameController对象上面是非常合适的,所以我们直接来试试看,首先我们在Assets->Audio文件夹中找到我们的背景音乐music_background,然后将其直接拖入GameController对象

将背景音乐拖入**GameController**

然后我们再选中GameController对象,便可以在Inspector视窗中看到音频相关的组件了,如下图:

音频组件

其中我们需要关注的两个设置:

对于我们的背景音乐,这两个选项我们都有确保勾选,做完这些,我运行游戏便可以听到宏伟的背景音乐了!

二、添加游戏音效

添加游戏音效的方法和添加游戏背景音乐的方法很类似,在本例中我们会添加3个音效

首先我们来看前面2个爆炸音效,这两个音效实现非常简单,我们找到爆炸效果的Prefab文件,然后直接将音效文件拖入Prefab中,在这边,我们为了方便拖动,将Project视图改为One Column Layout模式

One Column Layout模式

然后在Assets->Audio文件夹中找到对应的两个音效文件explosion_asteroidexplosion_player,并分别将两个音效文件拖入explosion_asteroidexplosion_player两个Prefab

拖入音效文件

然后确保Play On Awake模式是勾选的,做完这些,运行一下游戏,便可听到爆炸的音效了

还剩下一个子弹设计的音效,他的挂载方式和上面的都一样,只是播放的方式是需要在代码中激活的,我们首先在Assets->Audio文件夹中找到射击音效weapon_player,然后将音效文件拖入Player对象

拖入**Player**对象

然后去掉Play On Awake的勾选,因为我们不能在游戏一开始就播放射击音效,我们需要在发射子弹的时候才会播放,所以我们打开PlayerController脚本,进行编辑:

完整的代码

写完代码,保存一下,然后回到Unity编辑器,运行游戏,发射子弹时便可以可以听到子弹射击音效了

三、调节音效平衡

现在我们有了背景音乐,爆炸音效和子弹射击的音效,如果耳朵敏感的朋友,可能会觉得,相对于爆炸音效,子弹射击的音效有些过于大了,所以我们可以通过单独调节射击音效的音量,来到达各个音效之间的一个平衡,首先我们选中Player对象,然后在其AudioSource组件中调整Volume选项,在本例中,我们将Volume调节为0.5

调整射击音效的音量

然后我们在运行一下,现在各个音效就处于一个比较平衡的状态了

四、给游戏计分

现在我们的游戏有了玩法,有了声音,已经可以玩乐了,如果增加一个计分功能,就能让玩家有更好的追求,也让重复的射击动作变得有意义,要实现计分功能,我们首先需要一个UI来显示分数,下面我们就来创建一个计分UI,首先我们新建一个Text类型的GameObject,然后将其命名为Score Text,在5.2版本中,新建一个UI类的GameObject,编辑器会自动帮我们创建CanvasEventSystem两个GameObject

截图

为了让我们的UI适配我们设定的尺寸,所以我需要选中Canvas来修改UI缩放模式,在本例中,我们使用Scale With Screen Size模式,也就根据屏幕尺寸来缩放,然后将引用的屏幕分辨率设置为600*900,也就是我们的游戏屏幕尺寸

UI缩放模式

然后选中Score Text,修改它的位置,使其处于屏幕合适的位置,在本例中,我们将它的x和y值分别设置为-205和420,让其处于屏幕的左上角

左上角的计分UI

有了这个计分UI后,我们需要思考一下,如何才能让它正确显示玩家的分数呢?

那么我们就来看看如何实现上面的内容,要实现上面内容的第一点和第二点,比较合理的方式是在我的GameController里面来实现,所以我们打开GameController脚本,增加以下代码:

完整的代码

写完代码,保存一下,然后回到Unity编辑器,将我们的Score Text对象拖入到scoreText变量中

拖入到**scoreText**变量

做完这些,我们就实现了第一点和第二点的内容了,那么第三点我们该如何实现呢?我怎么实现子弹击碎障碍的时候来增加分数呢?我们先回忆一下,子弹击碎障碍的逻辑代码在哪个脚本里面?没错就是DestroyByContact,所以打开它然后新增以下代码:

完整的代码

写完代码,保存一下,然后回到Unity编辑器,将score设置为10(这个数值你可以根据自己喜好来设置,但建议最好大于0),然后运行游戏,这时你会发现每次你击碎障碍后,分数就会增加10分

五、是时候结束游戏啦

现在我们的游戏越发完美了,但是还存在一个挺严重的问题,就是游戏无法结束,即使我们的飞船被炸毁,游戏也不会结束,这可不太好,所以我们需要设置一下,当我们的飞船被炸毁后,我们就结束游戏!

相信有些聪明的朋友,已经想到了制作思路——我们在判断飞船炸毁的脚本里面,添加一句让游戏结束的代码就行了,没错,其实思路就是这么简单,接下来我们来看看怎么实现:

添加GameOver的UI

首先我们还是新建一个Text对象,然后命名为GameOver Text,然后修改它的显示内容为GameOver,为了让他更加醒目,我们将他的字体调整为25,然后位置摆放在屏幕的中间,并且修改它的文本对象方式为中心对象,接着将其字体颜色设置为红色,具体属性设置如下图:

GameOver的属性设置

然后你变会看到游戏屏幕中间就会有一个大大的红色的GameOver了,接着我们需要修改GameController脚本来让程序知道如何判断游戏结束

完整的代码

写完代码,保存一下,然后回到Unity编辑器,将我们的GameOver Text对象拖入到gameOverText变量中

拖入到**gameOverText**

接着我们再打开DestroyByContact脚本,进行如下编辑:

完整的代码

写完代码,保存一下,然后回到Unity编辑器,运行游戏,测试一下,你会发现当飞船被撞毁后,游戏就会出现GameOver的提示了

六、有结束就有重新开始

现在我们游戏可以结束了,但是如果游戏结束之后,我们不能重新开始,那游戏岂不是只能玩一次,所以我们需要给游戏增加重新开始的功能,为了让玩家知道怎么来重新开始,所以我们需要新建一个Text来提示玩家如何来重新开始,我们将新建的Text命名为Restart Text,然后将其的属性设置为下图所示:

**Restart Text**的属性设置

然后我们打开GameController脚本来控制重新开始的逻辑:

完整的代码

写完代码,保存一下,回到Unity编辑器,然后将Restart Text拖入restartText,接着运行游戏,测试一下

最终效果

七、最后一步——发布游戏

终于,我们的游戏制作已经完成了,接下来就是发布游戏,可以分享给我们的朋友玩啦,关于如何发布游戏在Unity官方实例教程 Roll-a-Ball(二)的最后我们有讲解过,所以这里就不做详细介绍啦,希望每个读者朋友都能真正学以致用,而不是依赖教程,最后谢谢所有能够看到这里的朋友!

上一篇 下一篇

猜你喜欢

热点阅读