目录
制作一个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)。