目錄
制作一個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)。