欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > UI管理器的使用

UI管理器的使用

2024/10/25 21:06:44 来源:https://blog.csdn.net/weixin_62613770/article/details/143165251  浏览:    关键词:UI管理器的使用

解释

UIMgr 类是一个 UI 管理器,用于管理游戏中的所有 UI 面板。它使用了层级划分,使得不同类型的面板(底层、中层、高层和系统层)能够有条理地进行管理。以下是这个管理器的主要功能和方法,以及一个详细的使用案例

主要功能:

  1. 面板层级管理

    • 使用枚举 E_UILayer 划分面板的层级,确保 UI 的组织和显示顺序。
  2. 面板显示和隐藏

    • ShowPanel<T>:显示指定类型的面板。如果面板已加载,直接显示;如果未加载,异步加载并显示。
    • HidePanel<T>:隐藏指定类型的面板,可以选择是否销毁。
  3. 面板获取

    • GetPanel<T>:获取指定类型的面板,支持在面板加载中进行回调。
  4. 自定义事件添加

    • AddCustomEventListener:为 UI 控件添加自定义事件监听器,以响应特定的 UI 事件。

代码详细解释:

  1. 构造函数

    • 在构造函数中动态创建了 UI 摄像机、Canvas 和 EventSystem,确保这些组件在场景中唯一并能在场景切换时不被销毁。
  2. 面板管理

    • 使用字典 panelDic 存储面板信息,包含面板实例和回调函数。
  3. 显示面板 ShowPanel

    • 根据面板类型加载并显示相应的面板,支持异步加载和回调。
  4. 隐藏面板 HidePanel

    • 根据需要隐藏或销毁面板,更新面板的状态信息。
  5. 获取面板 GetPanel

    • 允许外部在面板加载完成后获取面板实例,并执行回调。
  6. 添加事件 AddCustomEventListener

    • 允许为 UI 控件添加事件监听,确保每个控件只挂载一个事件触发器。

案例

假设我们要创建一个简单的游戏开始面板,使用 UIMgr 来管理其显示和隐藏。

1.创建开始面板类

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.XR;public class BeginPanel : UIPanelBase
{TextMeshProUGUI text1;TextMeshProUGUI text2;TextMeshProUGUI text3;protected override void Awake(){base.Awake();text1 = GetControl<TextMeshProUGUI>("Text1");text2 = GetControl<TextMeshProUGUI>("Text2");text3 = GetControl<TextMeshProUGUI>("Text3");}private void Start(){}public override void ShowMe(){ResShow();}public override void HideMe(){}private void ResShow(){MonoMgr.Instance.StartCoroutine(GradientDisplayAdd(text1));MonoMgr.Instance.StartCoroutine(GradientDisplayAdd(text2));MonoMgr.Instance.StartCoroutine(GradientDisplayAdd(text3));}private void ResHide(){MonoMgr.Instance.StartCoroutine(GradientDisplaySub(text1));MonoMgr.Instance.StartCoroutine(GradientDisplaySub(text2));MonoMgr.Instance.StartCoroutine(GradientDisplaySub(text3));}protected override void ClickBtn(string btnName){switch (btnName){case "btnBegin":ResHide();break;case "btnSetting":HideMe();break;case "btnQuit":HideMe();break;default:break;}}
protected virtual IEnumerator GradientDisplayAdd(TextMeshProUGUI text,UnityAction callBack=null)
{currentColor = Color.white;currentColor.a = 0;text.color = currentColor;while (true){currentColor.a += 0.01f;yield return new WaitForSeconds(0.01f);text.color = currentColor;if(text.color.a >= 1)break;}callBack?.Invoke();
}protected virtual IEnumerator GradientDisplaySub(TextMeshProUGUI text, UnityAction callBack = null)
{currentColor = Color.white;currentColor.a = 1;text.color = currentColor;while (true){currentColor.a -= 0.01f;yield return new WaitForSeconds(0.01f);text.color = currentColor;if (text.color.a <= 0)break;}callBack?.Invoke();
}
}

使用每个公有方法:

  1. ShowPanel<T>:在 MainMenu 类中展示设置面板。
  2. HidePanel<T>:在 SettingsPanel 类中处理关闭按钮点击时隐藏面板。
  3. GetPanel<T>:可以在 MainMenu 中获取面板实例(未在此示例中直接用到,但可以扩展)。
  4. AddCustomEventListener:可以为 UI 控件添加自定义事件,例如添加鼠标悬停效果等(未在示例中直接用到,但可以扩展)。

这个案例展示了如何使用 UIMgr 管理 UI 面板,如何将其与其他组件连接并实现简单的交互逻辑。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com