遊戲引擎學習筆記:介紹、架構、設計及實現

發表於2014-09-24

從小到大,雖然玩過的遊戲不少,但是從寫程式開始,目前為此僅僅寫過2個遊戲。其一是2011年在MTK平臺下寫的貪食蛇,其二是2010年在嵌入式開發板上寫過一個迷宮的遊戲。第一個程式碼量大概有3000行左右,第二個有2000行左右。

這2個遊戲都很簡單,而且網上有很多現成的例子可供參考,因此難度也比較低。

這2天把拖延了好久的Android應用開發揭祕的遊戲引擎的那一章看完了,收穫還是很大,在此寫一篇讀書筆記。

關於Game Engine,我能想到的幾個問題:

  1. 遊戲引擎是什麼?
  2. Game Engine是為了解決什麼問題?
  3. Game Engine的架構是什麼?
  4. 如何設計一款遊戲引擎?
  5. 遊戲引擎包含哪些模組?

下面就來探討幾個問題:

1. Game Engine是什麼?

遊戲產業在全球來看是一個很大的產業,一款遊戲大作包含了非常多的元素。遊戲涉及到劇情、人物、任務、關卡、地圖、畫質、美術、音樂、網路等多種元素。開發一款遊戲實際上需要耗費非常多的資源,據說North Star的《GTA V》耗資幾億美元。正因為如此,在開發專案過程中,儘可能複用之前專案成功的東西就非常重要。

一款遊戲中,Game Engine直接控制著劇情、關卡、美工、音樂、操作等內容,將遊戲的所有元素捆綁在一起。

一般來說,一款Game Engine需要包含以下模組:

  1. 基本框架(渲染、邏輯、物理 等等各部分如何組裝)
  2. 資源管理
  3. 渲染
  4. 基本邏輯(網遊還要解決邏輯的同步問題)
  5. 物理(有時候和邏輯合併)

—————-分割線,以下是重要但較為獨立的部分——————–
6. UI
7. 音樂音效
8. 網路
9. 指令碼(有些型別的遊戲引擎需要指令碼和邏輯的關聯性非常強,有些指令碼則比較獨立)

2. Game Engine為了解決什麼問題?

Game Engine實際上有效的減少開發者編寫程式時的冗餘勞動,同時增強遊戲的可移植性

Engine就是遊戲的框架,我們需要往框架中填充內容就可以形成一個遊戲。

引擎,就是一系列的工具和生產鏈,像Unreal 3,Unity這樣的成熟引擎,用起來非常方便,就是因為它的關卡/場景編輯器十分宜用,支援多種指令碼語言。這類引擎運用恰當的話,理論上能將關卡除錯和物件流水線的大部分工作從程式設計師那裡完全移出。

3. Game Engine的架構

遊戲 = 引擎(程式) + 資源(影像、聲音、動畫等)
目前的Game Engine的架構都是Model-View-Controller架構,邏輯和顯示分開,由一個邏輯控制流來協調Client的請求和Server的行動。

  1. View: 負責介面回執
  2. Controller:處理工作流程的建立和種植,使用者輸入,各種事件的處理
  3. Model: 模型、邏輯,程式的功能實現

訊息迴圈->更新資料->繪製各節點 這是繪製的基本結構基本不會有大的改變。

各種引擎的變種很大部分是在遊戲邏輯上的封裝。指令碼也好,直接寫程式碼也好。比如較為古老的資料與函式分離,以C語言為代表。大行其道的類結構。以c++為代表。以及現在光環日耀的CBSE,基於元件的架構

4. 如何設計一款遊戲引擎?

<1>. 結構設計及功能設計

Game Engine的設計包括結構設計、功能設計及注意事項。

Game Engine包括圖形引擎、指令碼引擎、物理引擎、工具模組、音效引擎、網路元件、事件元件等。

Android遊戲主要包括一個Activity類、流程控制類、遊戲執行緒類和遊戲物件類。Activity類是遊戲的執行單元,負責遊戲生命週期的控制。

流程控制:提供在遊戲中多個介面之間切換方法;

遊戲執行緒:不斷監測可能發生的各種事件,計算遊戲狀態,重新整理螢幕。

<2>. 注意事項:

手機遊戲的主要問題是 硬體限制 及 電池瓶頸。CPU及記憶體不足,螢幕大小,音效等多方面限制,在設計時需要注意這些方面。

5. 實現一款遊戲引擎

遊戲引擎只是一款炒菜的炒菜鍋,但有了好的炒菜鍋不一定能保證炒出好的菜

遊戲引擎的實現就很複雜了,需要按照上一節的架構及功能設計去編碼實現,目前絕大部分都是物件導向程式設計,設計好各種類。比如人物、NPC、道具、動畫、動植物等等。有餘力的同學可以去研究研究。

最近流行的一些遊戲,其實也並不需要多麼NB的遊戲引擎,充分發掘使用者的痛點才能設計出一款好的遊戲。

目前有很多開源的Game Engine可供大家研究,比如Unity3D, Box2D等,大家可以去網上搜尋並研究。

6. 對手機遊戲的展望

這2年玩過的手機遊戲也不少,我也來談談一款好的手機遊戲應該具備哪些特徵:

  1. 上手容易,精通不易,且玩且珍惜。手遊面向的是大眾,所以上手難的遊戲就一律pass,必須保證遊戲具有簡單性,讓玩家一安裝就可以玩的;
  2. 可中斷,時間短。一般玩遊戲,都是在公交地鐵上等碎片時間裡,所以提供的是短時間的娛樂效果,允許在遊戲和工作模式之間順利切換;
  3. 必須加入SNS元素:一款好的手遊應該具有社交元素,可以加入LBS尋找周圍的玩家,或和好友一起玩遊戲及互動,抑或者認識新的好友。因為手遊都很簡單,所以要留住玩家,加入SNS可以留住玩家;
  4. 充分利用手機的各項優點:手機的優點比如便攜性,私密性,即使抵達。手機是我們身體的延伸,所以一款好的遊戲應該充分利用手機的一些感測器、攝像頭、網路、藍芽,找出特點,以便設計出一款優秀的遊戲。

相關文章