<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Unity 游戲框架搭建 2017(一)概述 為了重構手頭的一款項目,翻出來當時未接觸Unity時候收藏的視頻[ 《Unity項目架構設計與開發管理》 ](http://v.qq.com/boke/page/d/0/u/d016340mkcu.html "《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: ```cs // 存儲動可服用的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](http://www.tuicool.com/articles/u6NN7v) * 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](https://github.com/sschmid/Entitas-CSharp) 此篇的內容就這些。 ## 更多內容 * QFramework 地址:[https://github.com/liangxiegame/QFramework](https://github.com/liangxiegame/QFramework) * QQ 交流群:[623597263](http://shang.qq.com/wpa/qunwpa?idkey=706b8eef0fff3fe4be9ce27c8702ad7d8cc1bceabe3b7c0430ec9559b3a9ce66) * **Unity 進階小班**: * 主要訓練內容: * 框架搭建訓練(第一年) * 跟著案例學 Shader(第一年) * 副業的孵化(第二年、第三年) * 權益、授課形式等具體詳情請查看[《小班產品手冊》](https://liangxiegame.com/master/intro):https://liangxiegame.com/master/intro * 關注公眾號:liangxiegame 獲取第一時間更新通知及更多的免費內容。 ![](http://file.liangxiegame.com/38eccb55-40b2-4845-93d6-f5fb50ff9492.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看