UGF学习4-UI

https://blog.csdn.net/m0_37920739/article/details/104089605

https://blog.csdn.net/weixin_42066580/article/details/117691546?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-10.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-10.no_search_link

https://www.jianshu.com/p/b75718ac2f1f

UI组件结构

UI五大事件:

  • 界面打开成功事件
    OpenUIFormSuccessEventArgs
  • 打开界面失败事件
    OpenUIFormFailureEventArgs
  • 打开界面时加载依赖资源事件
    OpenUIFormDependencyAssetEventArgs
  • 打开界面更新事件
    OpenUIFormUpdateEventArgs
  • 关闭界面完成事件
    CloseUIFormCompleteEventArgs

UIManager:
里面一个字典是用来保存已经加载的视图资源,打开界面时会从对象池里面获取到资源。
如果获取不到将实例化这个资源然后保存到对象池里,然后对用数据结构进行界面资源信息的增删改查更新。
这个脚本主要是提供给使用框架的我们重要的接口。

UIForm:
是打开界面的时候会实例化界面信息然后挂载到界面上的
底层框架的UIManager将需要使用此脚本的函数
这个脚本与我们使用框架的人没有任何关系

UIGroup:
由UIManager调用,我们调用UIManager的函数就可以了。

UGuiGroupHelper:
界面组辅助器,就是控制界面组的一些API,目前只有深度的控制的函数。

DefaultUIFormHelper:
界面辅助器,就是控制界面的一些API,比如界面的创建和释放等等。

UIComponent:
实际挂载到物体上并且来控制界面的,主要是对UIManager的一层封装,调整参数对这个模块可能进行裁剪。
比如是否需要打开界面成功的事件,实例化界面资源的优先级,界面组初始化的个数等。

UIComponent在Start的时候主要是对UIManager进行初始化。
一般开发的使用我们的界面组可以定义4个叫

  • NormalGroup(基本界面组)
  • PopupGroup(弹窗界面组)
  • HintGroup(提示界面组)
  • ToppestGroup(最高深度组)

生命周期

UI组件的使用

UIComponent的使用

UIComponent 是对 UIManger的封装,没有特殊需求时使用 UIComponent 即可。

常用方法:

  • AddUIGroup
    增加界面组
    bool ADDUIGroup(string uiGroupName, int depth)

    • uiGroupName:
      界面组名称
    • depth:
      界面组层级(在哪个图层)
    • 返回是否成功增加界面组
  • OpenUIForm
    打开界面
    int OpenUIForm(string uiFormAssetName, string uiGroupName)

    • uiFormAssetName:
      界面名称
    • uiGroupName:
      界面组名称
    • 返回打开的界面ID
  • CloseUIForm
    关闭界面
    void CloseUIForm(UIForm uiFrom)

    • uiFrom:
      要关闭的界面对象
  • RefocusUIForm
    激活界面

    • void RefocusUIForm(UIForm uiForm)
    • void RefocusUIForm(UIForm uiForm, object userData)
      • userData:
        用户自定义数据

UI打开时是异步的

更多AIP见
https://gameframework.cn/api/class_unity_game_framework_1_1_runtime_1_1_u_i_component.html

UIGroup的使用

UIGroup 实际上是将同一Layer层级(图层)上的UI界面打包成一组(可以理解为深度)。

一般情况下可以将一个游戏的UI界面分为以下几个层级

  1. Background层
    最底层UI
  2. Scene层
  3. Normal层
    用户点开的多级UI
  4. Info层
    广播,消息弹窗
  5. Tip层
    错误提示
  6. Top层

UIForm的使用

每个独立的UI界面就是一个UIForm对象。
它应该只是窗口,相关的逻辑内容应该写在UIFormLogic中。

以下方法都可以重写在继承了UIFormLogic的UI逻辑类中

自定义UIForm的方法:

常用方法:

  • 界面初始化
    void OnInit(object userData)

  • 界面打开
    void OnOpen(object userData)

  • 界面关闭
    void OnClose(bool isShutdown, object userData)

  • 界面暂停

  • 界面暂停恢复

  • 界面遮挡

  • 界面遮挡恢复

  • 界面激活

  • 界面轮询

  • 界面深度改变(更改所在层级)

UI组件拓展接口

UIExtension类进行扩展接口的查阅,它是静态拓展UIComponent类,具体实现在StarForce工程中,可以CV到UnityGameframework中进行使用,具体接口表格如下:

接口名称 作用
FadeToAlpha 界面的透明度渐变的协程
SmoothValue 进度条的逐渐达到目标点的协程
HasUIForm 是否存在此界面的id
GetUIForm 获取挂载到此界面的UGuiForm
CloseUIForm 把此界面的UGuiForm脚本作为参数关闭界面
OpenUIForm 通过界面的枚举id去打开界面
OpenDialog 打开自定义的提示界面
OpenNativeDialog 打开原生态的提示界面