UNITY架构设计

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()

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

    LevelManager:推荐插件: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的管理

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

    对每一种Prefab都分别进行管理,设置成层次,更好的实现方式是将一个PoolManager分成:


        若干个 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思想    


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

event-->回掉

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

class-->

Ui event

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



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

绑定操作:

绑定操作的缺点: 

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

8.MVVM:UFrame

规则:




    






  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Debug_horizon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值