TFrame框架

当前位置:首页>技术博客>TFrame框架
全部 15 TFrame框架 2 游戏渲染 0 编辑器扩展 0 性能优化 3 SDK 4 数据结构和算法 1 杂项 5

逻辑核心管理器Manager及TFrame

时间:2021-06-12   访问量:2603

框架的核心脚本,Manager.cs

采用单例模式,注册游戏中其他的管理器


使用方法:


初始化某个管理器:

Manager.InitManager<LogManager>();


清理管理器:

Manager.UnInitManager<UIManager>();


在Update函数中,需要更新管理器:

Manager.UpdateManager();



Manager.cs源码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 管理器接口
///     InitManager初始化管理器;
///     UnInitManager清空管理器;
///     UpdateManager更新管理器;
///     GetManager获取管理器,如果不存在此管理器,会自动初始化管理器。
/// </summary>
public class Manager
{
    protected class ManagerMgr : Singleton<ManagerMgr>
    {

        protected Dictionary<string, IManager> _kManagerDic = new Dictionary<string, IManager>();
        public override void Init()
        {
            base.Init();
            _kManagerDic.Clear();
        }

        public override void UnInit()
        {
            base.UnInit();
            _kManagerDic.Clear();
        }

        public void InitManager<T>() where T : IManager,new()
        {
            var managerName = typeof(T).Name;
            if (_kManagerDic.ContainsKey(managerName))
            {
                return;
            }
            T t = new T();
            _kManagerDic.Add(managerName, t);
            t.Init();
        }

        public T GetManager<T>() where T : IManager, new()
        {
            var managerName = typeof(T).Name;
            if (!_kManagerDic.ContainsKey(managerName))
            {
                InitManager<T>();
            }
            return (T)_kManagerDic[managerName];

        }


        public void UnInitManager<T>() where T : IManager
        {
            var managerName = typeof(T).Name;
            if (!_kManagerDic.ContainsKey(managerName))
            {
                return;
            }
            IManager t = _kManagerDic[managerName];
            t.UnInit();
        }

        public void UpdateManager()
        {
            var enumerator = _kManagerDic.GetEnumerator();
            while (enumerator.MoveNext())
            {
                var item = enumerator.Current.Value;
                if (item==null)
                {
                    continue;
                }
                item.Update();
            }
        }
    }

    public static void InitManager<T>() where T : IManager, new()
    {
        ManagerMgr.Instance.InitManager<T>();
    }

    public static void UnInitManager<T>() where T : IManager, new()
    {
        ManagerMgr.Instance.InitManager<T>();
    }

    public static T GetManager<T>() where T : IManager, new()
    {
        return ManagerMgr.Instance.GetManager<T>();
    }

    public static void UpdateManager()
    {
        ManagerMgr.Instance.UpdateManager();
    }
}


TFrame源码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TFrame : Singleton<TFrame>
{

    public override void Init()
    {
        Manager.InitManager<LogManager>();
        Manager.InitManager<BundleManager>();
        Manager.InitManager<DownloadManager>();
        Manager.InitManager<JoystickManager>();
        Manager.InitManager<UIManager>();
        Manager.InitManager<VersionManager>();
        Manager.InitManager<HotfixManager>();
        Manager.InitManager<FirstRunManager>();
        Manager.InitManager<RunOnMainThreadManager>();
    }


    public void Update()
    {
        Manager.UpdateManager();
    }

    public override void UnInit()
    {
        Manager.UnInitManager<UIManager>();
        Manager.UnInitManager<JoystickManager>();
        Manager.UnInitManager<VersionManager>();
        Manager.UnInitManager<HotfixManager>();
        Manager.UnInitManager<FirstRunManager>();
        Manager.UnInitManager<DownloadManager>();
        Manager.UnInitManager<RunOnMainThreadManager>();
        Manager.UnInitManager<BundleManager>();
        Manager.UnInitManager<LoginManager>();
    }
}


只需要在启动脚本中,Start函数中:

TFrame.Instance.Init();


在启动脚本的Update函数中:

TFrame.Instance.Update();


在启动脚本的OnDestroy函数中:

TFrame.Instance.UnInit();


上一篇:没有了!

下一篇:Asset资产寻址系统使用方法

发表评论:

评论记录:

未查询到任何数据!