Unity进阶之ET网络游戏开发框架 05-搭建自己的第一个Scene

时间:2024-02-29 14:12:57

版权申明:

  • 本文原创首发于以下网站:
  1. 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
  2. 优梦创客的官方博客:https://91make.top
  3. 优梦创客的游戏讲堂:https://91make.ke.qq.com
  4. 『优梦创客』的微信公众号: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的场景层级之下