ET框架学习——UIComponent组件和UI组件

       UI组件继承自Entity,接通了Awake事件,执行Awake方法。内部维护了一个GameObject和一个Dictionary<string, UI> children字典。 Awake(GameObject gameObject)方法,会清空字典,并且给GameObject赋值。

       内部还有三个对字典操作的方法。Add(UI ui)方法向字典中添加元素,同时将该组件设置为ui对象的ParentRemove方法从字典中移除指定的元素。Get方法,从字典返回指定名字的UI对象,若是字典中没有指定对象,则从GameObject对象中按照名字查找指定的子对象,如果还是没有找到,就返回空,否则就根据找到的对象,使用ComponentFactory,创建UI组件,并且添加到字典中,返回。

  • UI组件 

  • UIComponent组件

       UIComponent组件继承自Componet组件,接通了Awake事件和Load事件,分别执行Awake方法和Load方法。

       UIComponent组件维护了一个Root,即所有UI的最终父对象,Dictionary<string, IUIFactory> UiTypesDictionary<string, UI> uis两个字典。其中,IUIFactory是一个接口,如下所示,内部提供了一个Create方法和Remove方法。

public interface IUIFactory
{
	UI Create(Scene scene, string type, GameObject parent);
	void Remove(string type);
}

        Awake方法中,获取了场景中的Global/UI这个对象,设置为Root对象。同时执行Load方法,该方法,获取所有持有UIFactoryAttribute特性的类,然后遍历获取UIFactoryAttribute特性,判空UiTypes字典中是是否有该特性类型。创建持有UIFactoryAttribute特性类的对象,因为UIFactoryAttribute特性修饰的类都是实现了IUIFactory接口,然后判空,对象不为空,则将该对象添加进UiTypes字典中去,键则是UIFactoryAttribute特性类型。

       Create方法则是根据特性类型创建UI组件对象。在UiTypes字典中查找指定特性类型的对象,然后指定该对象重写的Create方法(对象实现了IUIFactory接口)。同时将创建出来的UI组件,添加到uis字典中。然后设置该UI组件的canvas,就是设置UI的层级。

      另外就是一些对uis字典的操作,包括Add,Remove,Get等方法。

 


版权声明:本文为Tong1993222原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。