Unity Game FrameWork—模块使用—UI组件

官方解释:提供管理界面和界面组的功能,如显示隐藏界面、激活界面、改变界面层级等。不论是 Unity 内置的 uGUI 还是其它类型的 UI 插件(如 NGUI),只要派生自 UIFormLogic 类并实现自己的界面类即可使用。界面使用结束后可以不立刻销毁,从而等待下一次重新使用。
制作UI预制件,以及添加UI交互逻辑这一块就不说了,任意一个UI界面都需要这样的操作。

框架配置

首先看一下UIGroups最为核心的属性,使用时需要先创建好UI界面组,给界面组命名以及层级赋值。UI生成时会作为对应层级对象的子物体。
[图片]
再看一下其他属性,一般情况下不需要修改。
[图片]
前面五个是界面打开的相关事件,成功、失败、更新、依赖资源加载、关闭。
中间四个Instance属性我们在实体组件对象池中可以见到,当然含义也是一样的。
InstanceAutoReleaseInterval:界面实例对象池自动释放可释放对象的间隔秒数
InstanceCapacity:界面实例对象池的容量
InstanceExpireTime:界面实例对象池对象过期秒数
InstancePriority:界面实例对象池的优先级
每个参数具体的含义会在实体加载部分作具体的解释,这里只需了解,UI也是可以作为实体的,利用对象池来管理。
InstanceRoot是UI界面组的根(父物体),名称是UI Form Instances,这个是写死的,我们无须更改,也无须赋值。
UIFormHelper定义了具体的行为,我们如何实例化、创建以及释放界面。这里可以放一些个性化的需求,例如创建或释放界面时的过渡动画等。
UIGroupHelper只设置了层级,我们可以根据需要去使用。

UI生命周期

加载UI
框架直接加载方式如下:

//获取UI组件
UIComponent UiComponent=GameEntry.GetComponent<UIComponent>();
//加载UI
UiComponent.OpenUIForm("Assets/GameMain/UI/UIForms/MenuForm.prefab","DefaultGroup");
我们看下Demo加载里ProcedureMenu加载菜单界面
        public override void OnEnter(ProcedureOwner procedureOwner)
        {
    
    
            base.OnEnter(procedureOwner);
            GameEntry.Event.Subscribe(OpenUIFormSuccessEventArgs.EventId, OnOpenUIFormSuccess);
            m_StartGame = false;
            GameEntry.UI.OpenUIForm(UIFormId.MenuForm, this);
        }

Demo中省去了路径查找的方式,通过枚举ID找到资源,对应关系则通过读取数据表获取。
通过枚举ID打开UI的方法本身框架是没有的,该方法作为UIComponent的扩展方法在UIExtension脚本里。
[图片]
关闭UI

public override void OnLeave(ProcedureOwner procedureOwner, bool isShutdown)
{
    
    
    base.OnLeave(procedureOwner, isShutdown);
    GameEntry.Event.Unsubscribe(OpenUIFormSuccessEventArgs.EventId, OnOpenUIFormSuccess);
    if (m_MenuForm != null)
    {
    
    
        m_MenuForm.Close(isShutdown);
        m_MenuForm = null;
    }
}

获取UI

private void OnOpenUIFormSuccess(object sender, GameEventArgs e)
{
    
    
    OpenUIFormSuccessEventArgs ne = (OpenUIFormSuccessEventArgs)e;
    if (ne.UserData != this)
    {
    
    
        return;
    }
    m_MenuForm = (MenuForm)ne.UIForm.Logic;
}

UI加载成功后,我们可以通过UI加载成功事件获取到UI。获取到UI后,我们就可以根据逻辑需要调用UI的方法了。
UI生命周期
先看一下继承关系,MenuForm 继承于UGuiForm,UGuiForm继承于UIFormLogic。UIFormLogic里面生命周期方法蛮多,可以参考链接
[图片]
我们可以看到链接指向的是UIForm,但是我们的脚本是UIFormLogic。生命周期是怎么来的呢?
运行时,我们会发现在预制件的身上挂了一个UIForm,正是它来调用生命周期的方法。
[图片]
UIForm的源码,这里先不探讨,后续会继续学习总结,这里我们只需要知道,初始化、轮询、暂停、恢复、激活等方法可以通过生命周期来完成即可,如果我们有轮询等需求可以通过重写父类的生命周期方法即可,与MonoBehaviour的生命周期是一样的。不同之处在于我们是继承,MonoBehaviour是利用反射找方法名。

猜你喜欢

转载自blog.csdn.net/qq_37619255/article/details/129590073