今天来介绍一下Manager模块,Manager模块可以说是Framework框架中最重要的部分之一,话不多说直接开始。
概括
Manager模块由多种功能Manager类共同组成,如LoadManager(加载管理类)、ResourceManager(资源管理类)、UIManager(UI管理类)、AudioManager(声音管理类)、DataManager(数据管理类)、EventManager(事件管理类)等等。
这些Manager类分别负责相关模块的功能。有同学会问,什么情况下才会去封装一个Manager类呢?大致需要满足以下两个条件可以封装为Manager类:
第一,该功能需要在工程的不同地方调用。例如EventManager,在工程中类与类之间需要相互传递数据时,EventManager则可以实现事件的注册,并且可以在不同的地方实现事件的发送。再例如UIManager,UIManager负责UI界面的打开、关闭,UI的打开、关闭则会在场景加载完、按钮点击、服务器事件等不同情况下调用。
第二,该功能在工程运行时只需要一份实例。例如EventManager,在工程中事件需要统一的存储,在事件发送时,通过事件列表对事件进行统一的回调。再例如UIManager,UIManager负责所有UI的统一管理,包括UI的创建、打开、关闭、销毁等等,UI的操作都在一个UIManager内完成。
Manager类
Manager类都是以单例方式实现,在Framework中Manager类统一继承自ManagerBase类,ManagerBase类继承自SingletonMonoBehaviour实现单例模式。
下面是ManagerBase类的代码,SingletonPath定义的是Manager类绑定的对象路径。OnInit是一个虚函数接口,Manager类可以自行覆写初始化方法。
public class ManagerBase<T> : SingletonMonoBehaviour<T>where T : ManagerBase<T>
{/// <summary>单例路径</summary>public static string SingletonPath{get { return FrameworkDefine.ManagerRootPath; }}/// <summary>ManagerBase初始化</summary>public void Init(){OnInit();}protected virtual void OnInit(){}
}
SingletonMonoBehaviour实现的继承自MonoBehaviour的单例类。有关单例小伙伴们可以看我之前写的文章《【Unity知识点详解】Unity中的单例使用》。
ManagerCollection
由于Manager类都是单例,并且调用会分散在工程中的各个地方,对代码的维护会造成不少的麻烦,所以为了能够统一的管理,创建了一个ManagerCollection类用于存放所有的Manager类。所有的Manager类的调用都要通过ManagerCollection。
ManagerCollection是一个静态类,ManagerCollection提供了Manager类同名的属性用于调用Manager类实例。并且在InitManager中初始化各个Manager类。示例代码如下:
public static class ManagerCollection
{/// <summary>初始化管理类</summary>public static void InitManager(){EventManager.Init();UIManager.Init();}/// <summary>事件管理类</summary>public static EventManager EventManager{get { return EventManager.Instance; }}/// <summary>UI管理类</summary>public static UIManager UIManager{get { return UIManager.Instance; }}
}
相关文章
最后是关于不同Manager类的介绍,持续更新中。
LoadManager、ResourceManager介绍:https://blog.csdn.net/huoyixian/article/details/145621114
下面是Unity中单例的实现。
【Unity知识点详解】Unity中的单例使用