不管是端游還是手游,在游戲引擎提供的基本支持之上,一個項目,通常還是需要自己的邏輯層框架。今天,我們就聊一聊一個游戲項目基本的邏輯層框架組成部。這里以Unity3D引擎為例,但不限于Unity3D引擎。
資源管理
一個項目開始,最好就規(guī)劃好資源目錄。隨著項目的開發(fā),資源會越來越多,越往后,越難整理,而且需要耗費大量時間和精力,所以建議隨著項目的開發(fā),就不斷地做好資源規(guī)劃和整理的工作。
編輯器階段
- 資源打包模塊
對于Unity3D來說,主要是打包 AssetBundle
- 配置表導(dǎo)出模塊
很多游戲的大量配置,使用excel的形式,所以必然需要一個工具能夠?qū)xcel表結(jié)構(gòu),轉(zhuǎn)為代碼,并且把表數(shù)據(jù),導(dǎo)出到游戲運行時能夠解析的格式,例如二進(jìn)制。還可以自動生成運行時加載解析代碼。
- 協(xié)議導(dǎo)出模塊
很多游戲使用了google的 FlatBuffers 或者 Protocol Buffers,這里需要一個工具自動化地將協(xié)議文件導(dǎo)出成客戶端和服務(wù)器使用的代碼文件。
運行時階段
- 更新模塊
這個模塊主要是根據(jù)項目自定義的版本信息,從網(wǎng)絡(luò)上自動下載需要更新的資源文件,以及代碼文件,這里通常使用lua,然后解壓到資源目錄。這里面涉及到兩個重要的東西,一個是版本和資源文件的定義,一個是HTTP請求模塊。對于Unity3D,通常使用 UnityWebRequest
- 網(wǎng)絡(luò)通信模塊
TCP 或者 UDP,用于客戶端和服務(wù)器的邏輯通信。收發(fā)包數(shù)據(jù),根據(jù)協(xié)議號處理協(xié)議,具體處理函數(shù)為業(yè)務(wù)邏輯。
- UI管理器
如果是MVC結(jié)構(gòu),定義好UI面板的基類,各UI類繼承基類。UI分層,普通UI面板層,彈出式面板層,Loading層,特效層,等等,具體根據(jù)項目需求靈活定義。
- 事件系統(tǒng)
用于整個工程的業(yè)務(wù)邏輯之間通信。不過事件這種東西,有一個不好處就是有時候調(diào)試起來不是很直接,有時候難以確定是從哪里發(fā)來的事件,有弊有利。
- 代碼熱更新模塊
現(xiàn)在比較常用的解決方案是 lua,雖然寫起來比較蛋疼,但是很多項目都這樣用,也許是因為沒有更好的解決方案,也許是因為技術(shù)決策者的經(jīng)驗之談,這里就呵呵了。
- 原生交互模塊
對于手游,通常分為Android和iOS版本,不同的版本有一些地方需要和原生系統(tǒng)交互,例如將游戲截圖保存到相冊,這樣就需要調(diào)用原生系統(tǒng)的API。一些SDK的接入相關(guān)的東西,也可以歸于這個模塊。
- 一些小的工具類集合
- 配置表加載解析模塊
就是將編輯器階段打包好的配置表數(shù)據(jù),在這里讀出來,存起來,用于游戲業(yè)務(wù)邏輯使用
- 數(shù)據(jù)讀寫模塊
有時候需要將一些數(shù)據(jù)寫到本地,對于不同的平臺,Android,iOS,PC,存儲的路徑不同,這個模塊會將這些都封裝好,上層業(yè)務(wù)只管用就行,不需要關(guān)心路徑問題。
- 音頻模塊
游戲內(nèi)音頻播放及管理,例如同一音源,最多有多少個的控制,等等
- 日志模塊
日志的打印,各平臺寫入文件,設(shè)備上在屏幕上顯示下隱藏,等等