ET组件系统
组件系统
核心成员类
-
Object
该类非System.Object,是ET组件的元单元,继承自ISupportInitialize,实现了BeginInit与EndInit方法,两个方法能够在对象生成或序列化时触发。
热更层与Model层不同,为了避免跨域继承,所以ISupportInitialize与IDisposable接口都是自定义的
-
Component:组件
组件系统的基础类,继承自Object,、IDisposable
主要字段:InstanceId(唯一ID)、GameObject(Unity对象)、isFromPool(是否来自对象池)、parent(父组件)
属性:IsDisposed(是否已销毁),该属性通过判断InstanceId是否为0来校验组件是否被销毁
方法:
- Dispose(销毁方法),主要功能:触发组件的Destroy事件、从事件系统中移除组件的订阅、修改唯一ID为0、调用对象池回收自身、销毁Unity对象;
- EndInit(初始化方法),主要功能是在组件序列化后触发组件的序列化事件
-
ComponentWithId:带ID组件
继承自Component,拥有Component所有功能,与Component相比,多了一个ID字段,也就是说该组件拥有两个ID:InstanceId(唯一ID)、Id(组件ID)
-
Entity:实体
继承自ComponentWithId,拥有ComponentWithId所有功能,与上面介绍的组件最大不同点在于它自身是个容器,可以组件绑定为自己的子组件
字段:HashSet<Component> components(用于序列化时保证子组件跟随序列化)、Dictionary<Type, Component> componentDict(一个不能序列化的容器)
方法:AddComponent(添加组件),RemoveComponent(移除组件)、GetComponent(获取组件)、EndInit(初始化时将components里的子组件添加到componentDict中,并将子组件的父组件字段指向自身)
-
ObjectPool:对象池
用于分类存放被销毁的组件
字段:Dictionary<Type, ComponentQueue> dictionary
方法:Fetch(获取组件,如果对象池没有组件,则会动态创建一个组件)、Recycle(回收组件)
工具类
-
ComponentFactory:组件工厂
主要用于创建组件
方法:
- Create(创建一个Component,可以选择是否创建对象池)
- CreateWithParent(与Create相比多一个指定该组件的父组件功能)
- CreateWithId(创建一个ComponentWithId,可以选择是否创建对象池,并指定Id)
-
IdGenerater:ID生成器
方法:
- AppId:用于写入当前服务器Id
- GetAppId:用于获取当前服务器ID
- GenerateId:返回一个Id,随时间增长变换
- GenerateInstanceId:返回一个唯一ID,随获取次数增长
-
TimeHelper:时间助手
主要用户获取时间
方法:
- ClientNow:获取客户端时间,毫秒为单位
- ClientNowSeconds:获取客户端时间,秒为单位
-
HideInHierarchy:隐藏特性
当组件标识该特性后就不会为其自动生成GameObject
-
LayerNames:层级名字
主要用于规划Unity对象的layer名称
-
ComponentView:组件参考
主要用于通过Unity对象获取绑定的Conponent