Unity学习笔记 - Space Shooter (下)

接上篇 Unity学习笔记 - Space Shooter (上)

第七步 加入音效和背景音乐


音频文件(audio clips)直接拖到对应的game object上即可自动在该object上生成声音component-audio sources

选中 play on awake的话物品一出现,声音就会播

选中loop可以循环播

按上述,陨石爆破和飞船爆破的音效可以直接弄好

子弹发射的音效需在脚本里(Player Controller)控制一下:(当然不勾选play on awake)

Unity学习笔记 - Space Shooter (下)_第1张图片

背景音乐直接丢到Game Controller里就行了,勾上paly on awake和loop就可以了

其实背景音乐本身与Game Controller没什么关系,只是找个地放而已

最后可以对音量进行调节

第八步 记分和结算


1. 加入UI元素

这里有个小坑,视频里用的GUIText,但是这种方法在Unity 5.x版本里已经算是淘汰了。更好的方法是roll the ball里面讲的那种方式(建canvas,在其下建UI/text),详见http://www.jianshu.com/p/b1240f75aa28

当然通过GUIText也可以完成,我就是跟着视频用GUIText弄的,简单说下吧:

建个空物体Score Text,加个叫GUIText(Rendering下)的component;

GUIText在scene中看不到,因为它在当前世界(Screen Space)的前方,叫Viewport Space,这个space是这样的:只有x,y两个维度,左小角0,0,右上角1,1

Unity学习笔记 - Space Shooter (下)_第2张图片

2. 分数的计算

这里有点绕,基本逻辑和“绕”的点大概是这样:

(1)分数的显示、刷新、累加都可以写在GameController里,但是触发分数增加的条件在DestroyByContact,所以涉及这两个脚本,需要函数的互相调用

(2)在GameController创建了一个UpdateScore函数来刷新分数的显示(‘前端’),一个AddScore函数来累加分数(‘后端’),DestroyByContact里触发碰撞时运行AddScore。

(3)问题就出在DestroyByContact如何才能找到GameController,从而运行AddScore。

        - 不可以GameController.AddScore。因为每个脚本都本是一个原型(prefab),比如 GameController,挂在物体下的“它”只是它的一个例子。指向GameController的话,程序不知道指向的是哪一个例子。于是要建一个变量(gameController)来指向特定例子

      - 不可以直接把Hierarchy中的Game Controller拖入变量gameController。这里不算特别懂吧,大约是因为变量gameController定义在脚本DestroyByContact中,而DestroyByContact是挂在Asteroid上,而Asteroid是个prefab。prefab不能引用某个场景中的某个物体。但是当游戏开始运行后,prefab就变成例子了。所以要在游戏开始后,再引用Game Controller。

It doesn't make sense that a template (指prefab,即脚本DestroyByContact) that can be added to any scene in our game can hold a reference to an instance (指game controller上的脚本game controller) in just one scene.

--引自该教学视频

综合以上一大堆,就有了下面的脚本:

GameController部分(只粘了相关的部分)

Unity学习笔记 - Space Shooter (下)_第3张图片
Unity学习笔记 - Space Shooter (下)_第4张图片

DestroyByContact部分

Unity学习笔记 - Space Shooter (下)_第5张图片

最后在inspector中需要设定的值只有scoreValue。

2016.7.23 涉及的东西比较多,进度依然慢


3.结束游戏

(1)创建文本UI(用上文GUIText方法或Canvas方法):Restart Text,Game Over Text

(2)大结构还是在Game Controller里写:

两个bool变量,一个标记game over(gameOver),一个标记可以重新开始了(restart);

Unity学习笔记 - Space Shooter (下)_第6张图片

全局函数GameOver显示游戏结束文本,并标记gameOver为true;

gameOver=true后,停掉陨石波的循环-->break,显示可重新开始文本,标记restart = true;

Unity学习笔记 - Space Shooter (下)_第7张图片

restart = true后,开启重载功能。Input.GetKeyDown获取键盘按键,Application.LoadLevel重载场景,Application.loadedLevel为当前场景

Unity学习笔记 - Space Shooter (下)_第8张图片

(3)game over的触发还是回到DestroyByContact

Unity学习笔记 - Space Shooter (下)_第9张图片

最后返回unity,把文本拖到对用变量里,调调字号什么的。

然后就,完成了!!

最后的最后,跟着视频,build到了web,我用ie核的360浏览器可以运行(这玩意平时不用,偶尔还是有奇效的),chrome是不行的, 火狐装播放器之后应该是可以的。

后面还有个扩展课程,然而      打开后发现是一个2小时的视频--!,而且      连英文字幕都没有!!传送门http://unity3d.com/cn/learn/tutorials/projects/space-shooter-tutorial/extending-space-shooter-enemies-more-hazards?playlist=17147

这一篇就先到这里吧!

2016.07.24 两课学完,稍后写个学习总结吧


你可能感兴趣的:(Unity学习笔记 - Space Shooter (下))