為了重構手頭的一款項目,翻出來當時未接觸Unity時候收藏的視頻 《Unity項目架構設計與開發管理》 對於我這種初學者來說全是干貨。簡單的總結了一下,以后慢慢提煉。 關於Unity的架構有如下幾種常用的方式。
1.EmptyGO:
在 Hierarchy 上創建一個空的GameObject,然后掛上所有與 GameObject 無關的邏輯控制的腳本。使用GameObject.Find() 訪問對象數據。
缺點:邏輯代碼散落在各處,不適合大型項目。
2.Simple GameManager:
所有與 GameObject 無關的邏輯都放在一個單例中。 缺點:單一文件過於龐大。
3.Manager Of Managers:
將不同的功能單獨管理。如下:
- MainManager: 作為入口管理器。
- EventManager: 消息管理。
- GUIManager: 圖形視圖管理。
- AudioManager: 音效管理。
- PoolManager: GameObject管理(減少動態開辟內存消耗,減少GC)。
實現一個簡單的 PoolManager:
// 存儲動可服用的GameObject。
private List<GameObject> dormantObjects = new List<GameObject>(); // 在dormantObjects獲取與go類型相同的GameObject,如果沒有則new一個。 public GameObject Spawn(GameObject go) { GameObject temp = null; if (dormantObjects.Count > 0) { foreach (GameObject dob in dormantObjects) { if (dob.name == go.name) { // Find an available GameObject temp = dob; dormantObjects.Remove(temp); return temp; } } } // Now Instantiate a new GameObject. temp = GameObject.Instantialte(go) as GameObject; temp.name = go.name; return temp; } // 將用完的GameObject放入dormantObjects中 public void Despawn(GameObject go) { go.transform.parent = PoolManager.transform; go.SetActive(false); dormantObject.Add(go); Trim(); } //FIFO 如果dormantObjects大於最大個數則將之前的GameObject都推出來。 public void Trim() { while (dormantObjects.Count > Capacity) { GameObject dob = dormantObjects[0]; dormantObjects.RemoveAt(0); Destroy(dob); } }
缺點:
- 不能管理prefabs。
- 沒有進行分類。
更好的實現方式是將一個PoolManager分成:
- 若干個 SpawnPool。
- 每個 SpawnPool 分成 PrefabPool 和 PoolManager。
- PrefabPool 負責 Prefab的加載和卸載。
- PoolManager 與之前的 PoolMananger 功能一樣,負責 GameObject 的 Spawn、Despawn 和 Trim。
- 每個 SpawnPool 分成 PrefabPool 和 PoolManager。
要注意的是:
- 每個 SpawnPool 是 EmeptyGO。
- 每個 PoolManager 管理兩個 List (Active,Deactive)。
講了一堆,最后告訴有一個NB的插件叫 PoolManager- -。
-
LevelManager: 關卡管理。 推薦插件: MadLevelManager。 GameManager: 游戲管理。 C#程序員整理的Unity 3D筆記(十二):Unity3D之單體模式實現GameManager
-
SaveManager: 配置管理。
-
實現 Resume,功能玩到一半數據臨時存儲。 推薦 SaveManager 插件。可以 Load、Save 均采用二進制(快!!!) 所有 C# 類型都可以做 Serialize。 數據混淆,截屏操作。 MenuManager 菜單管理。
4.將 View 和 Model 之間增加一個媒介層。
MVCS:Strange IOC 插件。
MVVM:uFrame 插件。
5. ECS(Entity Component Based System)
Unity 是基於 ECS,比較適合 GamePlay 模塊使用。 還有比較有名的 Entitas-CSharp
此篇的內容就這些。
更多內容
-
QFramework 地址:https://github.com/liangxiegame/QFramework
-
QQ 交流群:623597263
-
Unity 進階小班:
- 主要訓練內容:
- 框架搭建訓練(第一年)
- 跟着案例學 Shader(第一年)
- 副業的孵化(第二年、第三年)
- 權益、授課形式等具體詳情請查看《小班產品手冊》:https://liangxiegame.com/master/intro
- 主要訓練內容:
-
關注公眾號:liangxiegame 獲取第一時間更新通知及更多的免費內容。
-