框架的核心脚本,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资产寻址系统使用方法