太空大戰遊戲開發實例

Unity 版本: 5.3.5.f1

一. 遊戲策劃
操做模式:
上下左右按鍵, 空格發射子彈

遊戲中的敵人:
(1) 初級敵人,裝甲交弱,以撞擊主角爲主, 沿弧線飛行
(2) 高級敵人,裝甲較強,能夠發射子彈, 直線飛行


二.遊戲場景製做
1.導入遊戲所須要的美術資源
方法一:
Assets目錄點擊右鍵->show in explorer->將美術資源直接copy到Assets目錄
在回到unity3d界面就能夠看到相關資源

方法二:
Assets目錄點擊右鍵->import new asset->瀏覽選擇目標資源

3.建立場景
File->new sense當前場景爲level0
 雙擊level0 便可選定編輯

(1).建立一個平面體做爲遊戲背景
GameObject->3D Object->Plane

U3D中採用左手座標系系統

 座標系相關姿式點: http://blog.gamerisker.com/archives/335.html
因此咱們能夠選擇top視角(從上往下看),便可觀察到平面
 
(2). 建立一個材質
assets目錄右鍵->create->material
Transparent材質將帶有alpha信息,能夠設置透明度(alpha cutoff)

(3). 完成場景設定
將background拖放到建立好的plane上面便可( U3D中不少操做均可以經過拖放來完成)
 
(4). 建立星空背景
繼續新建一個平面體,使其在剛剛星球平面體下方,在inspector->scale中能夠指明X和Z方向上的長度
因爲默認是1,我給2就恰好星球平面體的大小的2倍
 
繼續建立一個材質與其綁定
 
完成後效果以下:
 
4. 場景中添加動畫
(1) 選中星空圖平面體,菜單欄點擊Windows->animation(快捷鍵Ctrl+6)
 先點左上角那個小紅點開始錄製,而後選擇curves,點擊add property
出現各類顏色的線,好比Material._Main Tex_ST.w是黃色的線
拖動這個呈直線,斜率越低速度越慢(可是隻會跑半邊動畫)

如上路效果就是星空圖相對與星球向下移動
- -!這裏被坑的有點慘,玩了半天才玩懂

5.設置攝像機和燈光
(1) 設置攝像機
調整好視角
a. 按鼠標中建平移視圖
b. 按鼠標左鍵+alt鍵旋轉視圖
c. 按鼠標右鍵+alt鍵或滑動鼠標滑輪推拉視圖
d. 按F鍵快速鎖定選中目標
 調整好視角以後,在hierarchy窗口選擇Main Camera, Main Camera是遊戲的默認攝像機
在菜單欄選擇Game Object->Align with view 使攝像機視角與當前視角保持一致.

(2).設置燈光
添加亮度
Windows->Lighting->Ambient intensity調節亮度
 
添加燈光
GameObject->Light->point Light

添加完畢後會出現黃色的光源範圍
 
默認就有一個光源(看來黃色線條表示光源)
 


三.遊戲主角設定
遊戲的主角是一個太空飛船,也是咱們的操做目標

1.將主角設定到場景中
將Player.fbx拖放到遊戲場景, 在asset目錄有個播放的小三角形圖標

在光照效果下已經在星球代表造成陰影
 
 
酷炫 忽然明白了U3D就像是一套物理引擎,設計好遊戲場景,每一個場景有不一樣的物理元素(GameObject)
而後寫程序控制每一個GameObject實現遊戲邏輯
 
2. 編寫控制代碼
在assets目錄下新建script目錄,而後腳本目錄下新建Player.cs
雙擊腳本VS 2013打開,U3D目錄會自動生成VS的sln工程文件

將Player直接拖放到Player的Inspector窗口,便可完成腳本綁定
 
編寫代碼以下:
說明:
a. Start()函數 主要執行一些初始化操做
    Update()函數 每楨執行一次, 有點像Win32GUI編程中的WM_PAINT

b. Time.deltaTime表示每楨的通過時間,那些須要每楨作增減變更的數值都須要乘上Time.deltaTime
    咱們的例子種速度和Time.deltaTime相乘,表示每楨移動N米距離

c. Transform組件提供的主要功能和移動,旋轉,縮放遊戲體有關,其中Vector3類型的參數用來表示在x,y,z3個方向上移動的距離

這個時候點擊場景播放,就能夠發現咱們能夠控制戰機的移動了

U3D也識別出了Speed爲1
 
3. 建立子彈
(1). 設定子彈體
將rocket.fbx拖放到level0場景,編寫代碼以下:
 設置代碼組件後,咱們發現子彈so~一下就消失了

(2)建立子彈prefab
prefab能夠理解爲能夠重用的遊戲體,
而後咱們能夠在任意場合,時間包括其餘的U3D遊戲中重複使用

新建一個frefabs目錄,新建一個空的prefab,而後能夠直接從場景中的rocket拖放到prefabs便可
同時設置prefab腳本爲rocket.cs便可,原場景中的rocket能夠刪掉了
 
(3). 發射子彈
player中添加代碼, 注意必須是public,不然不會顯示在Inspector窗口
 
此時Inspector窗口多了Rocket屬性,將prefab的Rocket拖放到Rocket選項便可
 
 
編寫子彈邏輯,0.1秒發射一次子彈

 再次運行遊戲,能夠發射子彈了

4.建立敵人
建立敵人和建立主角差很少,直接拖動到上面便可,敵人能夠複用,因此最後仍是建立prefab

編寫代碼以下:
 
運行遊戲,敵人開始作曲線向下運動

5. 碰撞檢測
(1).爲敵人添加碰撞
選中敵人,添加組件

添加Physics->Box Collider
 
 將is Trigger勾選,使其觸發狀態激活
 
在繼續添加一個剛體,全部參與物理計算的遊戲體都須要一個剛體才能正常工做
Add Component->physics->rigidbody
去掉Use Gravity不受到重力影響
is kinematic 勾選使得遊戲體不受到物理模擬的影響

一樣爲主角和子彈添加剛體和物理碰撞


(2).設置tags
Edit->Project Setting->tags and layouts
添加2個tag
 
 在prefab中綁定tag
 
(3).遊戲體碰撞檢測
敵人代碼檢測邏輯:
碰撞到子彈後,根據子彈的威力遞減生命值,當生命值爲負數時,自動銷燬
碰撞到主角,直接死亡
 
子彈碰撞檢測
與敵人碰撞就銷燬
 
主角碰撞檢測
與不是己方子彈碰撞,都減小1點生命
 
(4). 遊戲邊界碰撞檢測
在遊戲下方添加一個遊戲邊界(一個空的遊戲體),當敵人碰撞邊界就銷燬

 設置以下
注意保證Y座標一致,否則可能沒法發生碰撞
 
6. 添加高級敵人
添加一個能夠發射子彈的高級敵人,其方法和主角同樣,只是控制交給計算機完成
 高級敵人繼承於初級敵人類便可, 重載移動方式函數
Awake每次實例建立會調用一次,時機早於start函數
實例建立當即尋找當前player,每隔2秒發射一顆定向導彈

7. 聲音和特效
導入音效文件和特效文件
新建一個FX文件夾->Import Package->Custom Package->*.unitypackage文件
也能夠把本工程的特效聲音文件導出爲unitypackage文件給其餘遊戲使用

(1).聲音播放
播放聲音須要添加Audio Source組件,Add Component->Audio-> Audio Source
 
代碼中定義
將聲音文件與m_shootClip綁定(U3D窗口拖放便可完成綁定)

Start中初始化Audio

調用Play相關函數便可播放聲音
 
(2). 特效
特效的操做和聲音比較類似,定義一個Transform

 
 U3D中將特效文件和該定義字段綁定
 
調用Instantiate函數播放爆炸特效
 

8. 敵人生成器
 咱們能夠定義一些空的GameObject來源源不斷的產生敵人,道理和主角發子彈同樣
把空的GameObject發射指定邏輯的敵人

建立2個prefabs,綁定不一樣的敵人,將prefab分佈到場景的指定地點出怪便可
 
同時用代碼控制出怪邏輯,5~10秒隨機生成敵人
 

9. 遊戲管理器
遊戲信息的展現,也是在場景裏面和一個空的GameObject綁定,執行相關的代碼

10. 新場景的創建(遊戲嚮導)
File->New Scene->保存爲start

添加一個空gameobject->添加一個組件GUI Texture->指定一張圖片
將攝像機對準圖片對象

編寫代碼,經過LoadLevel能夠載入其餘場景
 
11. 發佈遊戲
Edit->project Setting->Player設置發佈的圖標,公司,產品名稱等信息
 
設置遊戲分辨率相關信息
 
File->Build Setting便可發佈遊戲, 啓動遊戲後程序會按列表順便播放相應的場景
 
遊戲運行效果
 




 


相關文章
相關標籤/搜索