接上篇 Unity學習筆記 - Space Shooter (上)
第七步 加入音效和背景音樂
音頻文件(audio clips)直接拖到對應(yīng)的game object上即可自動在該object上生成聲音component-audio sources
選中 play on awake的話物品一出現(xiàn),聲音就會播
選中l(wèi)oop可以循環(huán)播
按上述,隕石爆破和飛船爆破的音效可以直接弄好
子彈發(fā)射的音效需在腳本里(Player Controller)控制一下:(當然不勾選play on awake)
背景音樂直接丟到Game Controller里就行了,勾上paly on awake和loop就可以了
其實背景音樂本身與Game Controller沒什么關(guān)系,只是找個地放而已
最后可以對音量進行調(diào)節(jié)
第八步 記分和結(jié)算
1. 加入UI元素
這里有個小坑,視頻里用的GUIText,但是這種方法在Unity 5.x版本里已經(jīng)算是淘汰了。更好的方法是roll the ball里面講的那種方式(建canvas,在其下建UI/text),詳見http://www.itdecent.cn/p/b1240f75aa28
當然通過GUIText也可以完成,我就是跟著視頻用GUIText弄的,簡單說下吧:
建個空物體Score Text,加個叫GUIText(Rendering下)的component;
GUIText在scene中看不到,因為它在當前世界(Screen Space)的前方,叫Viewport Space,這個space是這樣的:只有x,y兩個維度,左小角0,0,右上角1,1

2. 分數(shù)的計算
這里有點繞,基本邏輯和“繞”的點大概是這樣:
(1)分數(shù)的顯示、刷新、累加都可以寫在GameController里,但是觸發(fā)分數(shù)增加的條件在DestroyByContact,所以涉及這兩個腳本,需要函數(shù)的互相調(diào)用。
(2)在GameController創(chuàng)建了一個UpdateScore函數(shù)來刷新分數(shù)的顯示(‘前端’),一個AddScore函數(shù)來累加分數(shù)(‘后端’),DestroyByContact里觸發(fā)碰撞時運行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部分(只粘了相關(guān)的部分)


DestroyByContact部分

最后在inspector中需要設(shè)定的值只有scoreValue。
2016.7.23 涉及的東西比較多,進度依然慢
3.結(jié)束游戲
(1)創(chuàng)建文本UI(用上文GUIText方法或Canvas方法):Restart Text,Game Over Text
(2)大結(jié)構(gòu)還是在Game Controller里寫:
兩個bool變量,一個標記game over(gameOver),一個標記可以重新開始了(restart);

全局函數(shù)GameOver顯示游戲結(jié)束文本,并標記gameOver為true;

gameOver=true后,停掉隕石波的循環(huán)-->break,顯示可重新開始文本,標記restart = true;

restart = true后,開啟重載功能。Input.GetKeyDown獲取鍵盤按鍵,Application.LoadLevel重載場景,Application.loadedLevel為當前場景

(3)game over的觸發(fā)還是回到DestroyByContact

最后返回unity,把文本拖到對用變量里,調(diào)調(diào)字號什么的。
然后就,完成了!!
最后的最后,跟著視頻,build到了web,我用ie核的360瀏覽器可以運行(這玩意平時不用,偶爾還是有奇效的),chrome是不行的, 火狐裝播放器之后應(yīng)該是可以的。
后面還有個擴展課程,然而? ? ? 打開后發(fā)現(xiàn)是一個2小時的視頻--!,而且? ? ? 連英文字幕都沒有??!傳送門http://unity3d.com/cn/learn/tutorials/projects/space-shooter-tutorial/extending-space-shooter-enemies-more-hazards?playlist=17147
這一篇就先到這里吧!
2016.07.24 兩課學完,稍后寫個學習總結(jié)吧