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等方法。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章