Unity产品架构设计与项目架构优化

1.EmptyGO:

在Hierarchy上创建一个空的GameObject,然后挂上所有和GameObject(游戏物体)无关的逻辑控制脚本,使用GameObject.Find("")查找访问,

缺点:逻辑混乱,代码四散,不适合大型游戏



2.Simple GameManager:

所有与GameObject无关的逻辑都放在一个单例中。

缺点:单一文件过于庞大。



3.Manager Of Managers

   1.EventManager  //处理游戏中的消息机制,模块之间的消息访问和传递

   2.AudioManager //在场景中任何一个地方播放音频时,来访问和管理

   3.GUImanager    //管理UI点击,UI相关的管理

   4.PoolManager   //

   5.LevelManager  //游戏中管卡之间的管理

   6.GameManager //唯一一个每个游戏中都是不一样的管理器

   7.SaveManager   //保存一些配置,或者保存一些此时游戏的数据

   8.MenuManager //管理外观上的一些东西,比如动画,不要和GUImanager混合在一起



4.LevelManager  ()

   缺点:关卡多时,没法处理,无论时根据index或者场景名字,最好自己写个配置表,重写LeveIManager.LodeNext()

   不用关系上一个或者下一关卡时什么,没每一个关卡加一个参数,对每一个关卡进行区分

MadLevelManager。

   关卡切换之间的进度或者溶解



5.PoolManager  

登录后复制

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进行管理,需要在外部自己Lode和UnLode的管理

   没用的物件在池子里,那正在用的有可能也是很多,怎么管理呢?

更好的实现方式是将一个PoolManager分成:

unity产品架构 unity项目架构设计_List

若干个 SpawnPool(管理一类)。
每类SpawnPool分成PrefabPool。
PrefabPool只负责一个Prefab的加载和卸载。还管理此prefab 生成的新的实例。

PoolManager与之前的PoolMananger功能一样,负责GameObject的Spawn、Despawn和Trim。

缓式操作:每一帧不要突然删掉太多(npc)



6.SaveManager  

推荐SaveManager插件。二进制保存的,Load、Save均采用二进制(快!!!),抓屏操作

游戏退出后,实现Resume,功能玩到一半数据临时存储。



7.互联网上比较火的一个架构

MVCS:StrangeIOC插件。 ui和逻辑分离

优点:

实现UI的click事件和逻辑的剥离开,UI一定要和逻辑分开(中介者模式)

特效和逻辑分离:Bind思想    

unity产品架构 unity项目架构设计_List_02

IBinder.Bind<key>().To<value>().ToName(name);当两个key一样时,再根据名字来区分两个key

event-->回掉

interface-->实现  //绑定一个培生的实例,绑定一个刀或者剑。

class-->

Ui event

UI事件(可视化)通过Mediator来把逻辑分离,如图

unity产品架构 unity项目架构设计_List_03


mediation.Binder.Bind<ExampleView>().To<ExampleMeditor>();

绑定操作:

unity产品架构 unity项目架构设计_List_04

绑定操作的缺点:

reflection是比较慢的操作耗费时间



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空