CosmosEngine
https://github.com/mr-kelly/CosmosEngine
快速入門
- 1.將NGUI 3.7+版拷到Assets目錄下
- 2.在安裝Unity的電腦上,打開場景文件: Assets/CosmosEngine/Demo/DemoGame/Bootstrap.unity
- 點擊播放,開始一個框架DEMO, 功能包括:打開一個的UI窗(自動匹配腳本)、讀取一個Tab表格
簡介
CosmosEngine - Unity3D /2D 輕量級模塊化游戲開發框架,包含輕量級的代碼和常用模塊,提供一定的編程范式作約束和工作流程,旨在減少開發人員的重復工作和做決定的次數。
特性
非侵入式設計
一切從CosmosEngine.Create()開始,你甚至可以在現有的項目基礎上嵌入。
輕量級
CosmosEngine討厭厚重的代碼類,它十分輕量,使得任何人都可以很輕松的駕馭。
模塊化
框架的設計上,一切都是模塊化的,框架只是一個包含無數模塊的簡單容器。
其中,資源管理模塊(ResourceModule)和UI模塊(UIModule)是底層模塊,其余所有你自己的游戲邏輯都通過自定義模塊實現。另有一些提供常用模塊。(如:常用技能模塊、資源更新模塊、配置讀取模塊、多語言模塊等可熱插拔)
約定優於配置
制定了一些規則和約定,旨在減少軟件開發人員需做決定的次數,它們包括:類似Ruby on Rails MVC的UI模塊,事件驅動編程准則等。
輕松使用第三方插件
得益於輕量化、模塊化的設計,框架是包容一切第三方插件。
比如默認使用UI插件式NGUI,通過內部提供的NGUI橋接類實現與底層UIModule的銜接。
擁抱依賴和耦合
CosmosEngine中假定耦合是不可避免的,對依賴和耦合持開放的態度,使用顯式聲明來說明模塊耦合情況。譬如UI模塊,依賴Resource模塊,通過[CModuleDependency(xxx)]這個Attribute來說明。
同時CosmosEngine中更多的通過C#的委托/事件機制來減少降低耦合度,譬如說,在快速入門的DEMO中,UI依賴資源,但是GameSettings並不需要依賴資源模塊。
約定
作者早年從事Web開發,深深受到“約定優於配置”的影響,認為這是能夠讓開發人員、游戲策划人員走出無數配置文件陷阱的重要因素。
CosmosEngine中的約定,除去框架內部代碼外,是沒有強迫性的,如果你不喜歡,是可以拒絕使用,使用你自己的編程范式。
以下是一些使用CosmosEngine開發中建議的約定:
遵循微軟官方C#命名規范
緊跟着老大哥的命名規范,同時作者認為“語言命名規范”是一個語言快速入門的利器:
http://msdn.microsoft.com/en-us/library/ff926074.aspx
盡可能的不使用配置文件
CosmosEngine討厭配置,它傾向於通過命名之間的關系來確定邏輯關系。如一個GameObject叫UIWelcome,那么它使用CUIWelcome Class類進行匹配。
當然,它有一個全局的配置文件(Resources/CEngineConfig.txt),用於配置一些目錄定義。
事件驅動編程
開發過程中更多使用C#的事件/委托來實現高內聚低耦合。事件的使用通常有兩種方式,有人喜歡做全局事件,把所有事件扔到一個類里。CosmosEngine討厭這種方式,會令到某一個功能類對全局有依賴。
CosmosEngine的事件定義,只針對地寫在特定模塊內。
最終目標 - 把某個模塊拷到另一個項目可以不作任何修改運行,不重新發明輪子
新項目的開發過程中,最浪費時間的莫過於從頭構建底層框架了,既枯燥又重復。更令人恐懼的是不同項目有些功能是一樣的,卻因部分耦合的問題,導致要重寫、維護兩套代碼,惡心之極。
CosmosEngine中的所有設計,都基於這個開始思考的。
整體結構圖

使用經驗
異步編程,善用協程和回調
Unity的協程是一個非常好用的特性,它底層的很多異步都通過實現。
而CosmosEngine中回調也比較頻繁使用,用來簡化一些協程代碼,比如UI模塊函數CallUI,傳入回調函數,等待資源完成加載后執行。
協程的本質是每一個游戲幀進行輪詢,而回調的本質就是事件驅動編程。 CosmosEngine里的回調,基本是包裹着協程的。
不使用多線程、多進程,否則在Unity引擎中會有一些不可預料情況。
通過委托/事件大大的降低模塊耦合度
CosmosEngine的設計原則是,把一個類拷到另一個項目,可以完整無缺的運行。所有的內置模塊,最多會有1~2個的外部依賴,其它都是發送事件,交給外部進行事件綁定處理。
GBK編碼問題
盡管在以往項目有一套手機GBK解決方案,但並沒有放入CosmosEngine。CosmosEngine中統一使用UTF-8。
Excel保存表是GBK編碼
使用Excel表的過程中,會使用GBK進行表的保存。我們在使用CosmosEngine中對Excel表中實行編譯機制,既把GBK轉成UTF-8,同時又可以對未編譯的Excel表進行批注、亂塗亂畫。
工作流

CosmosEngine為三個角色(程序、美術、策划)的團隊協作提供一個工作流:
- 程序進行代碼的編寫,修改進行提交
- 美術進行資源設計,修改后進行提交
- 策划以Excel形式進行游戲內容編輯,通過Excel編譯器編譯成Tab-CSV或其它程序可讀內容。(在另一個開源項目KKDaemon中實現)
- Robot——機器人,CosmosEngine可配合另一個開源項目Handyman,進行Web端的定時自動代碼編譯、資源編譯等。(類似的還有QuickBuild等)
乍一看,它沒啥特別,事實它着重希望砍掉的一些重復的工作:
- 避免人工化的資源操作,譬如美術希望看到資源在游戲中的效果,提交並呼喚Robot進行資源編譯就可以了,不用打擾程序和策划
- 策划可以自由使用成熟的編輯器——Excel進行編輯,可以加注釋等讓自己工作更輕松
- 程序不用每天被策划問表怎么填和被美術呼喚幫忙試一下了
- 釋放多余勞動力,減少人力成本和時間成本————就是幫老板省錢
未來功能
CosmosEngine旨在讓一些復雜的事情變得簡單。
游戲開發圈子盛行加班;是的,開發一款游戲不容易,但不代表它不能變得更加容易。作者認為,對開發人員來說,糟糕的系統設計和低易用性的功能模塊是加班的罪魁禍首。有一些模塊功能,它並復雜,可卻經常重復。
未來將把這些模塊整合進去, 它們基本都是已實現的獨立模塊:
-
通用技能模塊(Skill-Bullet-Buff)
-
資源自動更新模塊(CUpdateModule)
-
Http模塊
-
新的資源依賴處理系統(CDependencyModule)
-
多語言系統(CLocalization)
-
預加載機制(CPreloadModule)
-
聲效模塊(CAudioModule)
-
Lua引擎(CScripts)
-
etc...
