Unity学习笔记 - Space Shooter (下)

作者: pirateH | 来源:发表于2016-07-24 22:38 被阅读459次

    接上篇 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 两课学完,稍后写个学习总结吧


    相关文章

      网友评论

      • 1885d20565da:是啊 后面的额外课程我看了一下就先放弃了

      本文标题:Unity学习笔记 - Space Shooter (下)

      本文链接:https://www.haomeiwen.com/subject/zxdwjttx.html