天天看點

【Unity3D遊戲開發】—— 太空大戰打飛機遊戲詳解

    大家好我是Kaven,今天給大家帶來的是一個Unity3D的打飛機的小項目。俗話說“眼看千變,不如手過一邊”,學了差不多兩星期Unity3D了,是時候找個小項目練練手了。于是就翻出了cocos2d-x的一個例子,模仿着寫了一個飛機大戰的遊戲,雖然有一些功能沒有實作,但總體上是完成了。閑話少說,下面開始吧。

    由于這個用的是Unity3d自帶的原生的2D插件native 2d,是以建立項目時左下角選擇2d。

    這個小遊戲我分了三個場景,菜單場景,遊戲場景,結束場景。由于菜單場景與結束場景都比較簡單,是以主要就說說遊戲主場景。源碼在文章結尾處。

1.建立遊戲場景

  由于建立的是2d項目,則将圖檔拖入Scene中,該圖檔自動成為一個精靈,是以将圖檔資訊拖入擺放即可。

【Unity3D遊戲開發】—— 太空大戰打飛機遊戲詳解

    下面建立一個GameManager檔案,其綁定在錄影機中,主要負責飛機生命,玩家得分,背景播放等的顯示功能。而生命,得分的顯示需要我們建立GUIText來擺放。

代碼如下:

然後我們來實作背景的滾動。首先建立兩個一樣的背景圖檔上下擺放,如下圖所示,這裡切換到3d模式,更加形象

【Unity3D遊戲開發】—— 太空大戰打飛機遊戲詳解

下面建立用于綁定在背景上的腳本BGControll.cs,代碼如下

然後将腳本綁定在兩張背景圖上即可。

2.建立主角飛機

主角建立與背景建立基本一樣,也是可以用一張2d貼圖,就不多說了。主角腳本主要處理移動,發射子彈,處理碰撞等,代碼如下:

上面代碼中我用了bulletLeft,bulletRight,這是我為主機添加的兩個子對象,主要是用于發射子彈,相當于炮筒吧,而bullet則是定義的預設,其中綁定的腳本後面會說明。

【Unity3D遊戲開發】—— 太空大戰打飛機遊戲詳解

下面是Bullet子彈預設綁定的腳本代碼,子彈主要功能為與敵人發生碰撞,主角得分,敵人減血。

期間犯了個非常2的錯誤就是将OnTriggerEnter2D寫成了OnTriggerEnter導緻一直沒有碰撞,我竟然忘記我建的是2d項目了,函數名改了也不知道,查了些資料終于解決了,不仔細啊。

好了,通過以上的代碼我們就可以按鍵盤的方向鍵移動飛機,按空格鍵發射子彈了,我已經等不及要打敵人了。

3.建立敵機

敵機也是先拖入敵機圖檔,然後綁定腳本,添加元件,然後儲存為預設,我們以後還有個敵機生産器要生産敵機呢。

我建立了三種敵機預設

【Unity3D遊戲開發】—— 太空大戰打飛機遊戲詳解

敵機主要是移動,碰撞。下面來看看敵機腳本:

上面使用到了一個動畫,就是敵機爆炸時的動畫。那麼如何建立動畫呢?首先資源中可以拖動一組連續的爆炸圖檔到場景中,系統會自動提醒建立動畫,命名為explosion即可。然後Project視圖中就出現了一個animation和一個animator。在菜單欄找到Windows -> Animation和 Winodws -> Animator可以打開如下視窗。

【Unity3D遊戲開發】—— 太空大戰打飛機遊戲詳解
【Unity3D遊戲開發】—— 太空大戰打飛機遊戲詳解

具體的動畫編輯可以看看雨松MOMO的關于動畫的文章.

下面是敵機生産器,在主界面的左右兩邊的頂部分别放上兩個空物體用來建立敵機。敵機建立時間為1~3秒不等,然後綁定建立腳本即可。

4.關于碰撞檢測

子彈:

敵機:

碰撞檢測需要添加2d剛體元件和2d碰撞器元件,在Physics 2D中,不要選錯了。關于碰撞檢測的比較可以看看我的這篇文章。

最後就運作一下感受一下打飛機的快感吧(遮面)

【Unity3D遊戲開發】—— 太空大戰打飛機遊戲詳解
【Unity3D遊戲開發】—— 太空大戰打飛機遊戲詳解
【Unity3D遊戲開發】—— 太空大戰打飛機遊戲詳解

基本上這個一個小遊戲也就完成了,關于其他的一些功能可以随便加嘛,多幾個關卡就多建立幾個場景,還能加上BOSS戰什麼的。

由于無法導出我就打包了,源代碼:

最後說下我的想法吧, 今天早上一大早起來就去圖書館了,然後就坐在電腦前一直做到下午晚飯時才搞定。雖然這對于一個大牛來說不難,可能一會兒就解決了。但對于我一個新手還是蠻有挑戰性的(哈哈)。有些事是不做永遠不知道難度有多大,有些事是做了才會明白會有這麼多的問題,還有些事是做了會覺得也不過如此嘛,總之一點理論的基礎上多實踐,熟能生巧慢慢的也就會了。

最後附上一句話共勉:

             每一個成功者都是一位苦行僧,隻有他們自己才知道,通往成功的道路上,到底有多少寂寞與不解。

【Unity3D遊戲開發】—— 太空大戰打飛機遊戲詳解

文章作者:wxk_bigkang(Kaven) 

轉帖注明:

繼續閱讀