首先感謝作者涼鞋的筆記的分享,希望大家對3d素材unity有更多的了解! 為了重構(gòu)手頭的一款項目,翻出來當時未3d素材Unity時候收藏的視頻3d素材Unity項目架構(gòu)設計與開發(fā)管理》,對于我這種初學者來說全是干貨。簡單的總結(jié)了一下,以后慢慢提煉。 3d素材Unity的架構(gòu)有如下幾種常用的方式。 1.EmptyGO: ??在Hierarchy上創(chuàng)建一個空的GameObject,然后掛上所有與GameObject無關(guān)的邏輯控制的腳本。使用GameObject.Find()訪問對象數(shù)據(jù)。 缺點:邏輯代碼散落在各處,不適合大型項目。 2.Simple GameManager: ??所有與GameObject無關(guān)的邏輯都放在一個單例中。 缺點:單一文件過于龐大。 3.Manager Of Managers: ??將不同的功能單獨管理。如下: MainManager: 作為入口管理器。 EventManager: 消息管理。 GUIManager: 圖形視圖管理。 AudioManager: 音效管理。 *PoolManager: go管理(減少動態(tài)開辟內(nèi)存消耗,減少GC)。 實現(xiàn)一個簡單的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大于最大個數(shù)則將之前的GameObject都推出來。 public void Trim() { while (dormantObjects.Count > Capacity) { GameObject dob = dormantObjects[0]; dormantObjects.RemoveAt(0); Destroy(dob); } } 缺點: ??(1)不能管理prefabs。 ??(2)沒有進行分類。 更好的實現(xiàn)方式是將一個PoolManager分成: ??若干個 SpawnPool。 ??每個SpawnPool分成PrefabPool和PoolManager。 ??PrefabPool負責Prefab的加載和卸載。 ??PoolManager與之前的PoolMananger功能一樣,負責GameObject的Spawn、Despawn和Trim。 要注意的是: ??(1)每個SpawnPool是EmeptyGO。 ??(2)每個PoolManager管理兩個List (Active,Deactive)。 講了一堆,最后告訴有一個NB的插件叫Pool Manager- -。 *LevelManager: 關(guān)卡管理。 推薦插件:MadLevelManager。 GameManager: 游戲管理。 ??C#程序員整理的3d素材Unity 3D筆記(十二):3d素材Unity3D之單體模式實現(xiàn)GameManager *SaveManager: 配置管理。 ??實現(xiàn)Resume,功能玩到一半數(shù)據(jù)臨時存儲。 ??推薦SaveManager插件??梢?/font>Load、Save均采用二進制(快!!!) ??所有C#類型都可以做Serialize。 ??數(shù)據(jù)混淆,截屏操作。 MenuManager 菜單管理。 4.將View和Model之間增加一個媒介層。 MVCS:StrangeIOC插件。 MVVM:uFrame插件。 看完了這篇分享,是不是對3d素材unity游戲搭建有一定的了解了呢,如果能給您帶來一些幫助,匯寶盆萬分榮幸!更多精彩可以進群討論分享納金網(wǎng)匯寶盆交流⑤群 341024464。 本文轉(zhuǎn)載自網(wǎng)絡,謝謝作者分享。
|