管理器基类和GameRoot
管理器基类
为管理器创建基类和管理器单例。
public abstract class ManagerBase : MonoBehaviour{public virtual void Init() { }}public abstract class ManagerBase<T> : ManagerBase where T : ManagerBase<T>{public static T Instance;/// <summary>/// 管理器的初始化/// </summary>public override void Init(){Instance = this as T;}}
这里可以发现在ManagerBase单例类上又包了一层ManagerBase,其目的就在与对不同的管理器单例进行一层包装,这样统一方便在GameRoot中用数组进行统一存储(不必关系具体T是哪一类管理器),ManagerBase实际是所有管理器类的爷爷类。
ManagerBase[] managers = GetComponents<ManagerBase>();
这种思想在事件系统中也有类似体现,对不同参数个数的事件类进行一层接口封装,方便Dictionary进行存储,稍有区别在于事件系统中事件类型只存数据可以使用接口进行封装,而管理器由于需要继承Mono所以用抽象类进行封装(接口不能继承Mono类,也可以爷爷接口,父亲继承Mono)。
GameRoot
使用GameRoot控制管理器的初始化顺序。
protected override void Awake(){if (Instance != null){Destroy(gameObject);return;}base.Awake();DontDestroyOnLoad(gameObject);// 初始化所有管理器InitManager();}private void InitManager(){ManagerBase[] managers = GetComponents<ManagerBase>();for (int i = 0; i < managers.Length; i++){managers[i].Init();}}
对于GameRoot游戏根节点,其作为游戏运行的核心,挂载了许多功能脚本,应该是全局唯一且跨场景不销毁的,所以首先要判断当前是否存在GameRoot单例,存在那说明自己是多余的,把自己销毁并return,如果当前没有GameRoot单例(进入游戏第一个场景),需要调用父类的Awake方法完成单例实例化,再去调用InitManager对所有管理器类进行初始化,这样确保GameRoot第一个被加载且可以在这里自定义控制管理器类初始化顺序。
管理器基类和GameRoot相关推荐
- 【GFFrameWork】管理器和框架启动
前言 游戏开发中,我们会创建各种各样的管理器,可以说每一个模块我们就得创建一个管理器,例如ResourceManager.UIManager.DataManager.LogManager等等,作者之前 ...
- django-模型类管理器
小结 模型类.objects.all可以查询出所有的数据 objects是什么 ? 它是一个模型类的管理器 本质是一个描述符,描述符是一个类属性的值是另一个类的实例化对象如何自定义模型类管理器的all ...
- XM7 FOR ANDROID,Android-UI组件(一):布局管理器
本节主要介绍的是:以ViewGroup为基类派生的布局管理器 下面显示了android布局管理器的类图: android应用的图形用户界面具有良好的平台无关性,就是使用布局管理器来管理组件的分布.大小 ...
- 疯狂Android讲义(二)——第二部分:第1组UI组件(布局管理器)
一.第1组UI组件:布局管理器 Android 的界面组件比较多,不利于掌握它们内在的关系.为了帮助读者更好地掌握Android界面组件的关系,本书将会把这些界面组件按照它们的关联分析,分为几组进行介 ...
- Delta3D———通过游戏管理器组件和消息的扩展创建自定义行为 《转》
游戏管理器组件给我们提供了在不修改游戏管理器的情况下灵活扩展我们的自定义行为的能力.游戏管理器组件是基于消息来工作的,定义自定义行为的基本 流程就是创建自定义类型的消息,在合适的时候发送消息,创建自定 ...
- with语句和上下文管理器
1. with语句的使用 向文件中写入数据的示例代码: # 1.以写的方式打开文件f = open("1.txt", "w")# 2.写入文件内容f.write ...
- 此上下文中不支持函数定义。请在代码文件中创建函数。_深入解析Python上下文管理器,让你不再迷茫!...
1. 上下文管理器 一个类只要实现了 __enter__() 和 __exit__() 这个两个方法,通过该类创建的对象我们就称之为上下文管理器. 上下文管理器可以使用 with 语句,with语句之 ...
- C++ allocator设计内存管理器
文章目录 allocator内存管理器 基本属性 类的设计 关键功能的实现 完整的内存管理器 内存管理器的测试:设计自定义的String类. 前情回顾: allocator内存管理类 allocato ...
- java-Layout(布局管理器)
Layout(布局管理器) 布局管理就是用于指定组件的 摆放位置的.每种布局管理器都有自己的摆放风格. 注意:所有的布局管理器均是针对容器来使用的,包括顶层容器和中间容器. 一.布局管理器所属类包 所 ...
最新文章
- 50行Python代码 就能轻松实现中英文对接翻译小程序
- POJ 2104 K-th Number
- 自己动手写一个nodejs的日志生成器
- 【s操作】巧用免费云笔记和免费网盘的完美配合
- 互联网元年,如何提高我们?
- 强软弱虚引用,只有体会过了,才能记住
- Primality Test 素数,打表
- Redis 修改密码
- 对文本根据特殊字符进行分段代码_如何优雅地配置快应用的代码片段
- 上顿号符号_上顿号符号_标点符号(1):谈谈顿号的用法
- BufferedOutputStream_字节缓冲输出流
- oracle之单行函数之子查询课后练习2
- Inside Class Loaders
- mysql 一对多 join_Mysql中FIND_IN_SET与JOIN在一对多关系查询时的优劣
- 2020年300分计算机考研能上那个学校,2020年研究生考试很难吗 网友:我考300分能读吗?...
- iOSQuart2D绘图之UIImage简单使用
- 人生规划:20岁到60岁我该干什么
- Monte Carlo Rendering De-noising
- Visio2010绘制用例图
- python中scipy库的导入与函数调用方法_python的scipy库安装成功,导入scipy或其函数时却报错的问题...