• 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

    此篇的内容就这些。

    更多内容

  • 相关阅读:
    求单源最短路径两顶点最短距离(BFS)
    运用DFS算法解决的图的相关算法应用
    关于图的简单路径,输出、是否存在等总结
    邻接表与邻接矩阵互换
    Weblogic WLS-WebServices组件反序列化漏洞复现
    Android测试(四)——内容供应器泄露
    Android测试(三)——APK文件反编译
    漏洞复现——Apache SSI远程命令执行
    漏洞复现——Apache HTTPD多后缀解析漏洞
    漏洞复现——httpd换行解析漏洞
  • 原文地址:https://www.cnblogs.com/liangxiegame/p/Unity-you-xi-kuang-jia-da-jian-yi-gai-shu.html
Copyright © 2020-2023  润新知