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 面板,如何将其与其他组件连接并实现简单的交互逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/457346.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2.Linux按键驱动-创建字符设备,通过应用程序读取按键值

1.在上一个博客的基础上&#xff0c;添加一个字符设备 https://blog.csdn.net/weixin_40933496/article/details/143253515?spm1001.2014.3001.55012.在probe函数中注册字符设备 register_chrdev(包含对应的file_operations结构体) class_create device_create3.在中断处理函…

基于大模型的招聘智能体:从创意到MVP

正在考虑下一个 SaaS 创意&#xff1f;以下是我在短短几个小时内从创意到 MVP 的过程。 以下是我将在这篇文章中介绍的内容概述&#xff1a; 为什么这个想法让我产生共鸣我是如何开始构建它的我现在的处境以及我是否会真正推出 获得 SaaS 创意并构建它并不容易。就是这样。 …

opencv学习笔记(1):基础知识

1.像素&#xff1a; 像素&#xff1a;数字图像的最小单位。数字图像由像素组成&#xff0c;像素由一系列代码表示的原色组合而成。 2.颜色空间&#xff1a; 颜色空间&#xff1a;也称彩色模型&#xff08;又称彩色空间或彩色系统&#xff09;。 &#xff08;说白了就是用来描述…

FCN深度学习语义分割开山之作——学习笔记

《Fully Convolutional Networks for Semantic Segmentation》提出了首个端到端的针对像素级预测的全卷积网络&#xff08;FCN&#xff09;&#xff0c;可直接处理任意大小的输入图像并输出相应大小的预测结果&#xff0c;超过了现有技术水平。 一、提出背景 传统的语义分割方…

[计算机网络]第一周

TCP/IP 与OSI TCP/IP TCP/IP 四层模型是一个分层网络通信模型&#xff0c;它将网络通信过程分为四个层次&#xff0c;这四层分别是&#xff1a;网络接口层、互联网层、传输层和应用层。 网络接口层负责在计算机和网络硬件之间传输数据&#xff0c;负责在物理网络上发送和接收…

2024“源鲁杯“高校网络安全技能大赛-Misc-WP

Round 1 hide_png 题目给了一张图片&#xff0c;flag就在图片上&#xff0c;不过不太明显&#xff0c;写个python脚本处理一下 from PIL import Image ​ # 打开图像并转换为RGB模式 img Image.open("./attachments.png").convert("RGB") ​ # 获取图像…

241026-RHEL如何以root身份卸载Docker

在 RHEL 8.8 中&#xff0c;以 root 身份卸载 Docker 可以通过以下步骤完成&#xff1a; 停止 Docker 服务&#xff08;如果已启动&#xff09;&#xff1a; sudo systemctl stop docker删除 Docker 包&#xff1a; 运行以下命令卸载 Docker 引擎及其依赖包&#xff08;docker-…

Redis多级缓存

多级缓存 传统缓存的问题 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未命中则查询数据库&#xff0c;存在下面的问题&#xff1a; 请求要经过Tomcat处理&#xff0c;Tomcat的性能成为整个系统的瓶颈Redis缓存失效时&#xff0c;会对数据…

在多数据中心环境中,自动化运维如何保证跨区域的一致性?网络延迟导致的数据不一致是否可以完全避免?|自动化运维|跨区域一致性

目录 1. 跨区域一致性的定义与重要性 1.1 跨区域一致性的定义 1.2 跨区域一致性的意义 2. 网络延迟的挑战 2.1 网络延迟的来源 2.2 网络延迟对一致性的影响 3. 自动化运维如何实现跨区域一致性 3.1 使用分布式数据库 3.2 采用同步与异步复制 3.3 引入一致性协议 3.4…

Uni-App-03

登录功能开发 实现POST提交 HTTP协议规定请求消息内容类型(Content-Type)有哪些&#xff1f;—— 只有四种 text/plain 没有编码的普通数据 application/x-www-form-urlencoded 编码后的普通数据 multipart/form-data 请求主体中包含文件上传域 application/json 请求主体是 J…

【云原生网关】Higress 从部署到使用详解

目录 二、网关概述 2.1 什么是云原生网关 2.2 常见的云原生网关 2.2.1 Nginx 2.2.2 ApiSix 2.2.3 Kong 2.2.4 Apache Shenyu 2.2.5 Higress 2.2.6 Envoy​​​​​​​ 三、higress介绍 3.1 什么是higress 3.2 Higress 定位 3.3 Higress 内核选择 四、Higress搭…

Vscode + EIDE +CortexDebug 调试Stm32(记录)

{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","configurations": [{"cwd": "${workspaceRoot…

阿里面试竟被“DPO微调”吊打...

最近已有不少大厂都在秋招宣讲&#xff0c;也有一些已在 Offer 发放阶段了。 节前&#xff0c;我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行…

一个可以调节笔记本亮度的程序

在我这台笔记本上&#xff0c;当我把显示模式调为读显时发现右下角的亮度不能调了&#xff0c;就像这样 听说时nvidia显卡不适配的问题 咱也不知道呀 于是我就用java写了程序来调节&#xff0c;用了俩个多月&#xff0c;没啥问题的 打开就是这样拉动直接就可以调节 源码 im…

unity中的组件(Component)

在 Unity 中&#xff0c;组件&#xff08;Component&#xff09;是构成 GameObject 功能和行为的基础单元&#xff0c;每个 GameObject都可以附加一个或多个组件&#xff0c;以实现不同的功能 1. Transform 组件 描述&#xff1a;所有 GameObject 默认都有一个 Transform 组件…

C++研发笔记8——C语言程序设计初阶学习笔记6

在第一部分——课前准备的学习中&#xff0c;我就提到了学习C语言的过程中&#xff0c;练习是必不可少的环节&#xff0c;所以本篇笔记我们来进行记录我们学习《C语言程序设计初阶》阶段的第一篇练习文章。 题目一 下面哪个不是C语言内置的数据类型&#xff1a; A.char B.d…

【大数据学习 | kafka】kafuka的基础架构

1. kafka是什么 Kafka是由LinkedIn开发的一个分布式的消息队列。它是一款开源的、轻量级的、分布式、可分区和具有复制备份的&#xff08;Replicated&#xff09;、基于ZooKeeper的协调管理的分布式流平台的功能强大的消息系统。与传统的消息系统相比&#xff0c;KafKa能够很好…

C++基础:三个字符串也能搞大小?

上一篇说了三个整数比较大小&#xff0c;按照顺序输入的&#xff0c;这次我们看看字符串的&#xff0c;顺便把那个简化以下&#xff1a; 题目:这次输入三个字符串。如果用户输入“Stenbeck", “Hemingway”,“Fitzgerald”,输出将是“Fitzgerald&#xff0c;Hemingway&…

OPPO携手比亚迪共同探索手机与汽车互融新时代

10月23日&#xff0c;OPPO与比亚迪宣布签订战略合作协议&#xff0c;双方将共同推进手机与汽车的互融合作&#xff0c;这一合作也标志着两大行业巨头在技术创新和产业融合上迈出了重要一步&#xff0c;为手机与汽车的深度融合探索新的可能。 OPPO创始人兼首席执行官陈明永、OP…

LCD手机屏幕高精度贴合

LCD手机屏幕贴合&#xff0c;作为智能手机生产线上至关重要的一环&#xff0c;其质量直接关乎用户体验与产品竞争力。这一工艺不仅要求屏幕组件间的无缝对接&#xff0c;达到极致的视觉与触觉效果&#xff0c;还需确保在整个生产过程中&#xff0c;从材料准备到最终成品&#x…