美文网首页
ET组件系统

ET组件系统

作者: BacteriumFox | 来源:发表于2020-10-31 12:09 被阅读0次

组件系统

核心成员类

  • 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

相关文章

网友评论

      本文标题:ET组件系统

      本文链接:https://www.haomeiwen.com/subject/msflmktx.html