1. 程式人生 > >《Unity 3D遊戲客戶端基礎框架》概述

《Unity 3D遊戲客戶端基礎框架》概述

框架概述:

做了那麼久的業務開發,也做了一年多的核心戰鬥開發,最近想著自己倒騰一套遊戲框架,當然暫不涉及核心玩法型別和戰鬥框架,核心戰鬥的設計要根據具體的遊戲型別而定製,這裡只是一些通用的基礎系統的框架搭建,其中包括:

  • UI框架(NGUI + MVC
  • 訊息管理(Advanced CSharp Messenger
  • 網路層框架(Socket + Protobuf
  • 表格資料(Protobuf
  • 資源管理(Unity 5.xAssetBundle 方案)
  • 熱更框架(tolua

這裡使用的引擎版本是:Unity 5.5.0f3

UI框架:

使用 Unity 5.x

進行遊戲開發的朋友,估計大都想過用系統自帶的 UGUI 來搭建UI框架,這並沒有什麼不好的,只是對於引擎升級並不友好,假如Unity升級對 UGUI 做了比較大的修改,那麼對一個成型的專案進行引擎的升級,修改成本是不可估量的,所以這裡我還是選用 NGUI 作為搭建UI框架的工具,除了結合 MVC 架構還要考慮後期接入熱更新。

訊息管理:

這裡我們使用 Advanced CSharp Messenger 這種C#事件實現的訊息管理器,特點就是可以將遊戲物件作為引數傳送。而且,這個先進的c#版本的訊息傳遞系統會自動清理事件表在一個新的水平載入,這將防止程式設計師意外呼叫銷燬方法,從而有助於防止許多 MissingReferenceExceptions

這個訊息傳遞系統是基於杆海德 CSharpMessenger 和馬格努斯Wolffelt CSharpMessenger擴充套件。

網路層框架:

隨著行動網路的升級,在4G網路早已普及的今天,除了單機遊戲,現在絕大多數的網遊都是以強聯網的方式實現的,選用 Socket 通訊可以實時地更新玩家狀態,選定了聯網方式之後,還需要考慮網路協議定製的問題,Protobuf 無疑也是個比較好的選擇,一方面是跨平臺特性好,另一方面是資料量小可以節省通訊成本。

表格資料:

在遊戲開發中,有很多資料是不需要通過網路層從伺服器拉取下來的,而是通過表格配置的格式儲存在本地,例如:遊戲中的一個道具,通常伺服器之下發該道具的 Id

(唯一標識)和 lv(等級),然後客戶端從本地資料中檢索到該道具的具體屬性值。通常使用 Excel 表格來配置資料,但我們一般不會直接將 .xlsx 格式的表格原檔案打包到遊戲應用包中,通常會通過工具序列化為二進位制檔案的格式,讀取資料的時候再進行反序列化。上面我們提到了使用 Protobuf 定製網路協議,但是其實 Protobuf 的序列化和反序列化特性可以滿足我們對於表格資料轉化的需求。

資源管理:

對於資源的管理,其實是為了給後面接入熱更新提供可能,Unity製作遊戲的資源管理方式就通過 AssetBundle 工具將資源打成多個 ab 包,對於可熱更新的資源進行熱更的時候,並非單檔案的熱更,而是通過網路下載新的 ab 包來替換本地舊的包,從而實現熱更的目的。

熱更新框架:

通常使用C#來進行Unity的開發,但純C#指令碼只能支援Android系統下的熱更新,而對於iPhone系統則無能為力,所以這裡通常需要引入一門指令碼語言 lua ,使用C#編寫底層框架,使用lua編寫業務邏輯,這是業內最常見的設計方式,還有一個非常成熟的熱更新框架 tolua (前稱 ulua)。通常可熱更新的有:圖片資源、UI預製和lua指令碼,而出於跨平臺的考慮,C#指令碼是不允許進行熱更的。

小結:

上面只是大致說了一遍整個框架會涉及到的工具和技術點,下面我會對每個點進行逐篇細化,有興趣的可以繼續關注下,當然可以根據這些建議自己自學,那樣也可能會快很多。