1. 程式人生 > >GameFramework篇:前言

GameFramework篇:前言

到了現在,我感覺到對引擎的熟悉程度差不多了,也能自己做點小專案,可是著手寫大點的專案的時候,經常會有無從下手的感覺,設計模式也看了,別人原始碼也能看懂,可是就是寫不出人家那種水平的程式碼,於是我決定學習一個遊戲框架,熟悉他的流程,思想,並且應用到專案中。

我寫這個專欄的動機如下:

  • 學完整理成部落格,讓自己理解更深刻。

  • 網際網路教會了我很多,我要儘自己的一份薄力回報。

  • 希望幫助到學習這個框架的人。

GameFramework是Ellan大神的開源框架,下面是官網簡介:

Game Framework 簡介

Game Framework 是一個基於 Unity 5.3+ 引擎的遊戲框架,主要對遊戲開發過程中常用模組進行了封裝,很大程度地規範開發過程、加快開發速度並保證產品質量。

在最新的 Game Framework 版本中,包含以下 17 個內建模組,後續我們還將開發更多的擴充套件模組供開發者使用。

  1. 資料結點 (Data Node) – 將任意型別的資料以樹狀結構的形式進行儲存,用於管理遊戲執行時的各種資料。

  2. 資料表 (Data Table) – 可以將遊戲資料以表格(如 Microsoft Excel)的形式進行配置後,使用此模組使用這些資料表。資料表的格式是可以自定義的。

  3. 偵錯程式 (Debugger) – 當遊戲在 Unity 編輯器中執行或者以 Development 方式釋出執行時,將出現偵錯程式視窗,便於檢視執行時日誌、除錯資訊等。使用者還可以方便地將自己的功能註冊到偵錯程式視窗上並使用。

  4. 下載 (Download) – 提供下載檔案的功能,支援斷點續傳,並可指定允許幾個下載器進行同時下載。更新資源時會主動呼叫此模組。

  5. 實體 (Entity) – 我們將遊戲場景中,動態建立的一切物體定義為實體。此模組提供管理實體和實體組的功能,如顯示隱藏實體、掛接實體(如掛接武器、坐騎,或者抓起另一個實體)等。實體使用結束後可以不立刻銷燬,從而等待下一次重新使用。

  6. 事件 (Event) – 遊戲邏輯監聽、丟擲事件的機制。Game Framework 中的很多模組在完成操作後都會丟擲內建事件,監聽這些事件將大大解除遊戲邏輯之間的耦合。使用者也可以定義自己的遊戲邏輯事件。

  7. 有限狀態機 (FSM) – 提供建立、使用和銷燬有限狀態機的功能,一些適用於有限狀態機機制的遊戲邏輯,使用此模組將是一個不錯的選擇。

  8. 本地化 (Localization) – 提供本地化功能,也就是我們平時所說的多語言。Game Framework 在本地化方面,不但支援文字的本地化,還支援任意資源的本地化,比如遊戲中釋放煙花特效也可以做出幾個多國語言的版本,使得中文版裡是“新年好”字樣的特效,而英文版裡是“Happy New Year”字樣的特效。

  9. 網路 (Network) – 提供使用 Socket 長連線的功能,當前我們支援 TCP 協議,同時相容 IPv4 和 IPv6 兩個版本。使用者可以同時建立多個連線與多個伺服器同時進行通訊,比如除了連線常規的遊戲伺服器,還可以連線語音聊天伺服器。如果想接入 ProtoBuf 之類的協議庫,只要派生自 Packet 類並實現自己的訊息包類即可使用。

  10. 物件池 (Object Pool) – 提供物件快取池的功能,避免頻繁地建立和銷燬各種遊戲物件,提高遊戲效能。除了 Game Framework 自身使用了物件池,使用者還可以很方便地建立和管理自己的物件池。

  11. 流程 (Procedure) – 是貫穿遊戲執行時整個生命週期的有限狀態機。通過流程,將不同的遊戲狀態進行解耦將是一個非常好的習慣。對於網路遊戲,你可能需要如檢查資源流程、更新資源流程、檢查伺服器列表流程、選擇伺服器流程、登入伺服器流程、建立角色流程等流程,而對於單機遊戲,你可能需要在遊戲選擇選單流程和遊戲實際玩法流程之間做切換。如果想增加流程,只要派生自 ProcedureBase 類並實現自己的流程類即可使用。

  12. 資源 (Resource) – 為了保證玩家的體驗,我們不推薦再使用同步的方式載入資源,由於 Game Framework 自身使用了一套完整的非同步載入資源體系,因此只提供了非同步載入資源的介面。不論簡單的資料表、本地化字典,還是複雜的實體、場景、介面,我們都將使用非同步載入。同時,Game Framework 提供了預設的記憶體管理策略(當然,你也可以定義自己的記憶體管理策略)。多數情況下,在使用 GameObject 的過程中,你甚至可以不需要自行進行 Instantiate 或者是 Destroy 操作。

  13. 場景 (Scene) – 提供場景管理的功能,可以同時載入多個場景,也可以隨時解除安裝任何一個場景,從而很容易地實現場景的分部載入。

  14. 配置 (Setting) – 以鍵值對的形式儲存玩家資料,對 UnityEngine.PlayerPrefs 進行封裝。

  15. 聲音 (Sound) – 提供管理聲音和聲音組的功能,使用者可以自定義一個聲音的音量、是2D聲音還是3D聲音,甚至是直接繫結到某個實體上跟隨實體移動。

  16. 介面 (UI) – 提供管理介面和介面組的功能,如顯示隱藏介面、啟用介面、改變介面層級等。不論是 Unity 內建的 uGUI 還是其它型別的 UI 外掛(如 NGUI),只要派生自 UIFormLogic 類並實現自己的介面類即可使用。介面使用結束後可以不立刻銷燬,從而等待下一次重新使用。

  17. Web 請求 (Web Request) – 提供使用短連線的功能,可以用 Get 或者 Post 方法向伺服器傳送請求並獲取響應資料,可指定允許幾個 Web 請求器進行同時請求。

我覺得最重要的是理解第11個,流程的含義,因為它貫穿整個遊戲,遊戲的開始,更新,結束它都在參與。

GF官網:http://gameframework.cn

GF官方交流群:216332935(帶佬超級多)

已經有大佬開始為這個框架寫教程了,可是讓我這樣的小白看,有時還是有點吃力,所以我就以小白的的身份寫教程。(這裡的小白指的不是Unity小白,是遊戲框架方面的小白

笨木頭的GF教程:http://www.benmutou.com/archives/2473

有人說,框架只會限制自己,成不了氣候,我覺得是他用框架的方法不對,我們不能只循規蹈矩,而是要參透它的思想,並在其基礎上進行最適合自己專案的改動。也可能是我沒到那個境界~

這個專欄的更新可能會很慢,因為學這個框架確實不容易,我要確保把某一部分看懂了,才發教程,不然誤人子弟就不好了~當然,歡迎大家指出我文章的不足,共同把它變得更好,讓更多人知道這個強大的框架。