Unity 游戲框架搭建 2017 (一) 概述


 
        

為了重構手頭的一款項目,翻出來當時未接觸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 是 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

此篇的內容就這些。

更多內容


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM