查看: 2527|回復: 1
打印 上一主題 下一主題

[教程] 3d素材Unity 游戲框架搭建 (一) 概述

[復制鏈接]

25

主題

1

聽眾

314

積分

設計實習生

Rank: 2

納金幣
48
精華
0
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2016-8-19 18:38:27 |只看該作者 |倒序瀏覽
首先感謝作者涼鞋的筆記的分享,希望大家對3d素材unity有更多的了解!
為了重構(gòu)手頭的一款項目,翻出來當時未3d素材Unity時候收藏的視頻3d素材Unity項目架構(gòu)設計與開發(fā)管理》,對于我這種初學者來說全是干貨。簡單的總結(jié)了一下,以后慢慢提煉。
3d素材Unity的架構(gòu)有如下幾種常用的方式。
1.EmptyGO:
??在Hierarchy上創(chuàng)建一個空的GameObject,然后掛上所有與GameObject無關的邏輯控制的腳本。使用GameObject.Find()訪問對象數(shù)據(jù)。 缺點:邏輯代碼散落在各處,不適合大型項目。
2.Simple GameManager:
??所有與GameObject無關的邏輯都放在一個單例中。
缺點:單一文件過于龐大。
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分成PrefabPoolPoolManager。
??PrefabPool負責Prefab的加載和卸載。
??PoolManager與之前的PoolMananger功能一樣,負責GameObjectSpawn、DespawnTrim。
要注意的是:
??(1)每個SpawnPoolEmeptyGO
??(2)每個PoolManager管理兩個List (Active,Deactive)。
講了一堆,最后告訴有一個NB的插件叫Pool Manager- -。
*LevelManager: 關卡管理。
推薦插件:MadLevelManager。
GameManager: 游戲管理。
??C#程序員整理的3d素材Unity 3D筆記(十二):3d素材Unity3D之單體模式實現(xiàn)GameManager
*SaveManager: 配置管理。
??實現(xiàn)Resume,功能玩到一半數(shù)據(jù)臨時存儲。
??推薦SaveManager插件??梢?/font>LoadSave均采用二進制(!!!)
??所有C#類型都可以做Serialize。
??數(shù)據(jù)混淆,截屏操作。
MenuManager 菜單管理。
4.ViewModel之間增加一個媒介層。
MVCS:StrangeIOC插件。
MVVM:uFrame插件。
看完了這篇分享,是不是對3d素材unity游戲搭建有一定的了解了呢,如果能給您帶來一些幫助,匯寶盆萬分榮幸!更多精彩可以進群討論分享納金網(wǎng)匯寶盆交流⑤群 341024464。
本文轉(zhuǎn)載自網(wǎng)絡,謝謝作者分享。

本帖被以下淘專輯推薦:

  • · 教程|主題: 5, 訂閱: 1
分享到: QQ好友和群QQ好友和群 騰訊微博騰訊微博 騰訊朋友騰訊朋友 微信微信
轉(zhuǎn)播轉(zhuǎn)播0 分享淘帖1 收藏收藏1 支持支持0 反對反對0
回復

使用道具 舉報

0

主題

1

聽眾

74

積分

設計初學者

Rank: 1

納金幣
17
精華
0
沙發(fā)
發(fā)表于 2016-11-7 13:38:56 |只看該作者
漲知識了~還挺不錯的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

手機版|納金網(wǎng) ( 閩ICP備2021016425號-2/3

GMT+8, 2024-10-31 07:32 , Processed in 0.118324 second(s), 31 queries .

Powered by Discuz!-創(chuàng)意設計 X2.5

© 2008-2019 Narkii Inc.

回頂部