接上篇 Unity学习笔记 - Space Shooter (上)
第七步 加入音效和背景音乐
音频文件(audio clips)直接拖到对应的game object上即可自动在该object上生成声音component-audio sources
选中 play on awake的话物品一出现,声音就会播
选中loop可以循环播
按上述,陨石爆破和飞船爆破的音效可以直接弄好
子弹发射的音效需在脚本里(Player Controller)控制一下:(当然不勾选play on awake)
背景音乐直接丢到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
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部分(只粘了相关的部分)
DestroyByContact部分
最后在inspector中需要设定的值只有scoreValue。
2016.7.23 涉及的东西比较多,进度依然慢
3.结束游戏
(1)创建文本UI(用上文GUIText方法或Canvas方法):Restart Text,Game Over Text
(2)大结构还是在Game Controller里写:
两个bool变量,一个标记game over(gameOver),一个标记可以重新开始了(restart);
全局函数GameOver显示游戏结束文本,并标记gameOver为true;
gameOver=true后,停掉陨石波的循环-->break,显示可重新开始文本,标记restart = true;
restart = true后,开启重载功能。Input.GetKeyDown获取键盘按键,Application.LoadLevel重载场景,Application.loadedLevel为当前场景
(3)game over的触发还是回到DestroyByContact
最后返回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 两课学完,稍后写个学习总结吧
网友评论