版权申明:
- 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
- 优梦创客的官方博客:https://91make.top
- 优梦创客的游戏讲堂:https://91make.ke.qq.com
- 『优梦创客』的微信公众号:umaketop
ComponentView:
- 其object类型的Component成员能显示对象的字符串表示,如果是Component,会显示其MongoHelper.ToJson()的结果,便于调试
ReferenceCollector:
- 用于收集对象引用
- 使用方法:需要一个对象,就在该组件内增加一个键值对,也可以删除或排序等
- 好处:使用该组件可通过字符串(键)直接访问到对象(值),而无需创建无用的类(只是为每个GameObject要引用的对象单独建立一个脚本,并将被引用对象指定为该类的成员)
UIComponent:
- 管理UI对象的集合(增删改查)
- 其AwakeSystem会去找UICamera,并作为其管理的UI对象的worldCamera
- 该组件每Add一个UI Entity,Add方法就会:
- 将该UI Entity的父节点设置为该UIComponent
- Entity is a Component,每一个Component有一个GameObject字段,表示该实体对应的图形表示
- 设置Component的Parent属性的值,不仅会设置Component的parent字段的值,也会同步设置该Component的GameObject在场景中的父节点(参见:Component.Parent.set())
- 所以:Add一个Component就会添加一个场景子节点!
- 这种设计思想是:用一个管理型的Component来统一管理该类型的Component的集合(如:UIComponent管理UI实体的集合)
Component的层次结构:
- 只有Entity可以AddComponent,所以Component的Parent一定是一个Entity,但Entity的Parent不一定是Entity,也可以是Component,例如:我们创建的UI实体的父节点就是UIComponent组件
- Component可以单独作为一个GameObject存在(在场景层级中的位置任意),Entity是Component的集合(Entity创建时需要指定一个主Component,就好比Unity创建GameObject都要创建一个Transform组件,参见:ComponentFactory.Create()),所以一个Entity的Component未必都在Entity的场景层级之下