基本介紹
OxGFrame 是基於 Unity 用於加快遊戲開發的輕量級框架, 並且使用 UniTask 進行異步處理,從資源加載 (AssetLoader)、遊戲介面 (UIFrame)、遊戲場景 (GSFrame)、Unity場景 (USFrame)、遊戲物件 (EPFrame)、影音 (MediaFrame)、遊戲整合 (GSIFrame)、網路 (NetFrame)、事件註冊 (EventCenter)、API註冊 (APICenter)、Http.Acax (仿 Ajax 概念)等都進行模組化設計,能夠簡單入手與有效的加快開發效率,並且支持多平台 Win、Android、iOS,WebGL。
第三方庫依賴 (需先安裝)
- UnitTask Version 2.3.1 or higher
- MyBox version 1.7.0 or higher
- UnityWebSocket Version 2.6.6 or higher
【備註】Unity 2021.3.4f1 以下的額外需安裝 com.unity.nuget.newtonsoft-json,對於 jillejr.newtonsoft.json-for-unity 附加作者額外說明 (Unity 2021.3.4f1 以上的版本此庫可以不用安裝)。
模塊框架介紹
AssetLoader
只要是遊戲製作,不可避免有資源加載問題,採用計數管理方式進行資源管控 (支援 Resource 與 AssetBundle),一定要成對呼叫 Load & Unload (如果沒有成對呼叫,會導致計數不正確) 。 其中 AssetBundle 則採用自帶的配置檔進行主程式與資源版本比對,實現資源熱更新流程,並且下載器支援斷點續傳,也對於 AssetBundle 打包出來的資源,提供現有加密方式 Offset (偏移量方式)、XOR、HTXOR (Head-Tail XOR)、AES 實現檔案加密,還有針對加速 AssetBundle 開發方案提供在 Unity Editor 編輯器下能夠切換 AssetDatabase Mode 提高在 Unity Editor 編輯器中的開發效率。
選擇使用 Bundle 開發時,需要先將 BundleSetup 拖曳置場景中,才能驅動 BundleDistributor。
- Cacher【CacheResource, CacheBundle】(資源主要加載器)
- 如果沒有群組化需求,可以直接使用 Cacher 進行資源 Load & Unload (成對式)
- KeyCacher【KeyResource, KeyBundle】(Link Cacher 進行 Key 索引,用於分類資源群組快取操作)
- 如果有群組化需求,使用 KeyCacher 指定 GroupId 進行 Load 時,則相對需要使用 KeyCacher 進行 Unload (成對式)
- BundleDistributor (資源熱更核心)
- Downloader (下載器)
- 支援 Slice Mode (針對大檔進行切割式下載)
- FileCryptogram (檔案加解密)
- Bundle 加密推薦 HTXOR
- 運算效率 HTXOR ~= OFFSET > XOR > AES
- 內存占用 OFFSET > AES > HTXOR = XOR
- AB 包體積增加 OFFSET > AES > HTXOR = XOR
- 破解難度 AES > HTXOR > XOR > OFFSET
【備註】AssetBundle 打包建議使用 AssetBundle Browser Plus v1.9.1 or higher 作為打包策略規劃。
※如果有要運行 BundleDemo,找到 OxGFrame/AssetLoader/Example/BundleDemo/ExportBundles.zip 解壓後直接放到 Server,再自行更改 StreamingAssets/burlcfg 中的 IP。
CoreFrame
此模塊含蓋遊戲主要製作,針對製作對應使用 UI Prefab => UIFrame、Scene Prefab => GSFrame、Other Prefab => EPFrame、Unity Scene => USFrame 皆實現 Singleton Manager 進行控管與動態調度。支援 Resources 與 AssetBundle 加載方式 (多載),並且實現物件命名綁定功能 (UIBase and GSBase = _Node@XXX, EPBase = ~Node@XXX, 類型均為 GameObject)。
- UIFrame (User Interface) : 使用 UIManager 管理掛載 UIBase 的 Prefab (UI 的部分針對 MaskEvent 也可以自行覆寫建立 Mask 事件)
- GSFrame (Game Scene) : 使用 GSManager 管理掛載 GSBase 的 Prefab
- USFrame (Unity Scene) : 使用 USManager 管理 Unity 場景 (支援 Bundle)
- EPFrame (Entity Prefab) : 使用 EPManager 管理掛載 EPBase 的 Prefab
- UMT (Unity Main Thread)
※備註 : Right-Click Create/OxGFrame/CoreFrame... (Template cs and prefab)
MediaFrame
遊戲影音部分,支援多平台加載方式 (Local, StreamingAssets, URL),主要也對於 WebGL 有進行細節校正,因為 WebGL 對於 Audio 請求部分是無法取得正確長度 (官方放棄修正),導致音訊控制會有部分缺陷,所以支援預置體製作時,可進行 Preload 請求 Clip 長度進行預設置。
- AudioFrame : 使用 AudioManager 管理掛載 AudioBase 的 Prefab,且採用 Unity Mixer 進行各音軌控制 (需先將 AudioManager 預置體拖至場景)
- VideoFrame : 使用 VideoManager 管理掛載 VideoBase 的 Prefab,且支援 RenderTexture, Camera
GSIFrame (Game System Integration)
遊戲整合模塊,對於遊戲製作的時候缺乏整合系統,導致遊戲系統運作之間過於零散,基本上遊戲階段區分為 StartupStage (啟動階段), LogoStage (商業Logo階段), PatchStage (資源熱更階段), LoginStage (登入階段), ReloginStage (重登階段), EnterStage (進入階段), GamingStage (遊玩階段), FightStage (戰鬥階段) 等, 以上只是舉例大致上遊戲階段之間的劃分,基本上還是依照自己規劃創建為主,這些遊戲階段規劃好後,都可以使用 GSIFrame 進行整合與切換 (階段劃分後就可以自行實現每階段的運作)。
- GameStageBase,遊戲階段基類,在透過 Update 切換當前階段自定義的狀態流程 (Enum) 時,可透過 StopUpdateStage & RunUpdateStage 方法進行開關設置,即可停止或繼續 Update 的每幀調用 (需建立實作 => 右鍵創建)
- GameStageManagerBase,用於繼承實現管理層與註冊階段,管理基類已實現單例 (建議名稱為 GameStageManager 的實作 => 右鍵創建)
※備註 : Right-Click Create/OxGFrame/GSIFrame... (Template cs)
NetFrame (Websocket, TCP/IP)
實現統一接口,依照 Websocket 概念進行接口設計 (ISocket),OnOpen, OnMessage, OnError, OnClose,進行事件註冊後就可以針對網路狀態進行監控,也實現多網路節點 (NetNode),可以自行建立 Websocket NetNode 或是 TCP/IP NetNode,再由 NetManager 進行網路節點註冊進行管理操作,另外可以設置心跳檢測回調、超時處理回調、重新連接回調的各處理,並且也能實現 INetTips 接口網路訊息介面的實作。
- NetManager (網路節點管理器)
- NetNode (網路節點)
- TcpSocket
- Websock
- INetTips (網路狀態提示接口)
EventCenter
事件註冊監聽調度,可以自定義事件格式進行派送。
- EventCenter : 事件註冊調度管理,管理基類已實現單例
- EventBase,單個 Event 基類,需建立實作 => 右鍵創建
- EventCenterBase,EventCenter 管理基類 (建議名稱為 EventCenter 的實作 => 右鍵創建)
※備註 : Right-Click Create/OxGFrame/EventCenter... (Template cs)
APICenter
進行短連接 API 註冊請求,可以自定義每個 API 的格式進行統一管理與請求。
- Acax (類似 Ajax 方式,請求 API)
- APICenter : Http API 註冊管理,管理基類已實現單例
- APIBase,單個 API 基類,需建立實作 => 右鍵創建
- APICenterBase,APICenter 管理基類 (建議名稱為 APICenter 的實作 => 右鍵創建)
※備註 : Right-Click Create/OxGFrame/APICenter... (Template cs)
Utility
各通用組件 => Adapter, Pool, Timer, ButtonPlus
- Utility
- Timer => DeltaTimer, RealTimer, DTUpdate, RTUpdate
- Adapter => UISafeAreaAdapter
- Pool => NodePool (物件池)
- ButtonPlus => 繼承 Unity Button,實現 Long Press 功能 + Transition Scale 功能
Unity 版本
建議使用 Unity 2021.3.5f1(LTS) or higher 版本 - Unity Download
基於 OxGFrame 實現的小遊戲
License
This library is under the MIT License.
