天天看點

GameFramework架構——UIComponent

目錄

制作一個UI過程和UI相關說明

制作一個UI過程和UI相關說明

1、準備一個唯一ID   例如 : int CommonTipForm = 103;

2、在UIForm.txt添加一行,注意分隔符是Tab鍵

#    Id        AssetName    UIGroupName    AllowMultiInstance    PauseCoveredUIForm
#    界面編号    策劃備注    資源名稱    界面組名稱    是否允許多個界面執行個體    是否暫停被其覆寫的界面
    103 提示    UICommonTipForm Default TRUE    TRUE
           

① 關于PauseCoveredUIForm參數的說明:

意思是這個UI是否會暫停【被它所覆寫的[同一界面組]的界面】,上面TRUE就意味着它會覆寫掉所有它下面的UI。(先進後出-棧形式)

它下面的UI都會調用一些如:OnPause和OnCover方法  相反過來對應的有OnResume和OnReveal方法。

在UIFormLogic裡 OnPause  會将物體隐藏, OnResume會将物體顯示 ,調用的是gameObject.SetActive()方法,

是以需要特别注意的是,如果你在UI中啟動了協程,途中有一個UI,覆寫了你那個啟動協程的UI,那麼會因OnPause隐藏物體,而導緻協程終止引發問題.

解決方法:重寫OnPause方法,不讓它隐藏物體即可。(這是我的解決方法,暫時性的)

如上例子的UI則會暫停掉 Default界面組下 被它所覆寫的界面,它會周遊一下同一界面組的被覆寫的界面,檢出出那些還沒被Pause和Cover的界面,

調用它的OnPause和OnCover方法,已經處于Pause和Cover狀态的就不會再調用了。

② 關于AssetName參數的說明: UI預制體名稱

3、建立一個腳本,UICommonTipForm  繼承 UGuiForm 挂載到UI預制體根節點上。

4、調用方法打開UI:

int serialId = GameEntry.UI.OpenUIForm(UIFormId.CommonTipForm, "哈哈哈哈"); 
           

5、調用方法關閉UI:

在UI内部關閉UI的方法可以使用如下:

this.Close(bool);  //其中bool參數為true時會進行回收到對象池内,否則隻是簡單的做了個漸隐和隐藏物體并沒有回收的。
           

内外均可的關閉方法:

GameEntry.UI.OpenUIForm(UIGuiForm對象);  //内部可以直接用this..   
GameEntry.UI.OpenUIForm(int);  // int參數是 serialId,它是在你OpenUIForm時傳回的一個int傳回值。 
           

這些方法都還有很多可選參數,例如傳個userdata回去給OnClose使用啥的。

6、UI是有使用到對象池的,可以在UIComponent挂載的UI物體上看公開參數設定 對象池最大容量(Instance Capacity)和自動清理間隔時間 (Instance Auto Release Interval)。

繼續閱讀