Unity 3D 开发--UI管理框架

这篇具有很好参考价值的文章主要介绍了Unity 3D 开发--UI管理框架。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、UI基类

一般情况下都是用Panel做容器来放各种控件的,一个Panle相当一个UI小界面,然后做成Prefab进行加载,所有界面都有载入载出功能,有的可能还有等待和恢复的,适合建立一个UI基类,然后各个子界面继承。

 public abstract class WUIBasePanel : MonoBehaviour
    {
        public abstract void OnEnter();
        public abstract void OnExit();
        public abstract void OnPause();
        public abstract void OnResume();

    }

二、UI子类

每个UI子界面都继承基类,然后实现各个方法,加载的时候可以在OnEnter()方法做一些显示动画或一些状态的改变等,OnExit()里可以做消失动画和一些关闭界面需要做的操作等。为了方便统一启用和禁用管理都添加CanvasGroup组件,也可以用来做隐藏和显示。

public class WUIPanel1 : WUIBasePanel
{

    private CanvasGroup canvasGroup;
    public override void OnEnter()
    {
        if (canvasGroup == null)
        {
            canvasGroup = GetComponent<CanvasGroup>();
        }
        canvasGroup.blocksRaycasts = true;
        gameObject.SetActive(true);
    }

    public override void OnExit()
    {
        canvasGroup.blocksRaycasts = false;
        gameObject.SetActive(false);
    }

    public override void OnPause()
    {
        canvasGroup.blocksRaycasts = false;
    }

    public override void OnResume()
    {
        canvasGroup.blocksRaycasts = true;
    }
    public void ClosePanel1()
    {
        WUIManager.instance.PopPanel();
    }

    public void OpenPanel2()
    {
        WUIManager.instance.PushPanel("UIPanel2");
    }

三、UI管理类

需要一个Manager类统一管理所有的UI类,做成单例,因为每个Panel都是做成预制体来加载,所以需要一个Dictionary进行管理每个预制体所有的路径,每个预制体势力后也同一个Dictionary来管理做缓存,一个界面打开子界面,再打开孙界面,先关了孙界面才能管子界面,所以适合使用一个Stack来管理界面的显示和关闭。方法也建立两个一个PushPanel(),一个PopPanel()。


public class WUIManager
{
    private static WUIManager Instance;
    public static WUIManager instance
    {
        get
        {
            if (Instance == null)
            {
                Instance = new WUIManager();
            }
            return Instance;
        }
    }

    public Dictionary<string, string> pathDict = new Dictionary<string, string>
    {
        { "UIPanel1","UIPanel/Panel1"},
         { "UIPanel2","UIPanel/Panel2"},
         { "UIPanel3","UIPanel/Panel3"}
    };

    private Dictionary<string, WUIBasePanel> panelDict = new Dictionary<string, WUIBasePanel>();
    private Stack<WUIBasePanel> panelStack;
    private Transform CanvasTransform;
    public Transform canvasTransform
    {
        get
        {
            if (CanvasTransform == null)
            {
                CanvasTransform = GameObject.Find("Canvas").transform;
            }
            return CanvasTransform;
        }
    }

    /// <summary>
    /// 显示界面
    /// </summary>
    /// <param name="type"></param>
    public void PushPanel(string panelName)
    {
        if (panelStack == null)
        {
            panelStack = new Stack<WUIBasePanel>();
        }
        if (panelStack.Count > 0)
        {
            WUIBasePanel topPanel = panelStack.Peek();
            topPanel.OnPause();
        }
        WUIBasePanel panel = GetPanel(panelName);
        Debug.Log("push panel:" + panel.name);
        panel.OnEnter();
        panelStack.Push(panel);
    }

    /// <summary>
    /// 隐藏界面,隐藏逻辑自己写在界面代码里
    /// </summary>
    public void PopPanel()
    {
        if (panelStack == null || panelStack.Count < 1)
        {
            Debug.Log("stack have no panel");
            return;
        }
        else
        {
            WUIBasePanel topPanel = panelStack.Pop();
            topPanel.OnExit();
            if (panelStack.Count > 0)
            {
                WUIBasePanel curPanel = panelStack.Peek();
                curPanel.OnResume();
            }
        }
    }

四、使用

显示

WUIManager.instance.PushPanel("UIPanel1");

关闭

WUIManager.instance.PopPanel();

效果如下:
3d开发框架,U3D,ui,unity,游戏引擎

 五、源码

https://download.csdn.net/download/emailforwei/87254372文章来源地址https://www.toymoban.com/news/detail-545248.html

到了这里,关于Unity 3D 开发--UI管理框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity骚操作:更改u3d导出apk时候所使用的 gradle、GradleTemplates、VisualStudioGradleTemplates、minifyEnabled是否开启混淆等

    测试unity版本:5.6.4 gradle文件夹:里面的是一些unity用自身打包apk时候用到的一些工具 GradleTemplates文件夹:    libTemplate.gradle  mainTemplate.gradle  settingsTemplate.gradle 附上让Unity自身打APK的时候 使用上镜像并且设置上 build:gradle通用工具让 需要生成AS工程的时候 可以让AS识别

    2024年02月14日
    浏览(55)
  • U3D客户端框架之封装 DeviceUtil 获取设备唯一ID和设备型号

            以后上报游戏数据的时候可能需要根据设备唯一id做新增用户的计算,如果直接使用Unity的API会不方便,代码风格不符合我们自己的框架。所以对获取设备ID、设备型号的API 封装了一下。          DeviceUtil.cs 代码

    2024年02月11日
    浏览(56)
  • U3D客户端框架之支持断点续传的文件下载器实现方案

            文件下载器是应用程序的基础模块,为应用程序与外部网络交互提供了必要的桥梁。该模块设计初衷是为了热更新过程中,下载CDN站点上的文件资源,所以下载器会验证 要下载的文件是否存在于CDN中。如果存在允许下载器继续工作;如果不存在会跳过本地下载。

    2024年02月07日
    浏览(55)
  • 使用U3D、pico开发VR(二)——添加手柄摇杆控制移动

    1System: 2Move Speed:注意速度过小会导致看起来没有移动 3RightHandMoveAction(right loco move):个人采用右手柄实现移动 1System: 2Turn Speed:注意旋转速度过小会导致看起来没有移动 3RightHandMoveAction:个人采用右手柄实现旋转 至此,初步的移动功能就实现了

    2024年02月08日
    浏览(67)
  • U3D面试汇总!!!

    ① 微软开发的一种 OOP 编程语言。专门用于.NET应用而开发。 ② 面向对象的 三大特征 (封装,继承,多态)。除了三大特征以外,C#还添加了 事件和委托 ,增强了编程的灵活性。 ③ 简单,安全 。C#不再使用指针,而且不允许直接读取内存等不安全操作。提供了相比C/C++,

    2023年04月08日
    浏览(61)
  • U3D热更新技术

    @作者 : SYFStrive @博客首页 : HomePage 📌: 个人社区(欢迎大佬们加入) 👉: 社区链接🔗 🤷‍♀️: 创作不易转发需经作者同意😈 💃: 程序员每天坚持锻炼💪 👉 U3D热更新技术 (🔥) 🕐:开发者将测试好的代码,发布到应用商店的审核平台,平台方会进行稳定性及性

    2024年02月02日
    浏览(56)
  • U3D通过按钮点击实现场景切换

    1.新建UI,选择button选项,新建button;   3.新建一个空对象,挂载一个scenechange c#脚本; 4.编写脚本,1头文件using UnityEngine.SceneMangement                    2public void change() {                     scenemanager.loadscene (1)  }//括号中的数字为第2步中场景后面的数字          

    2024年02月07日
    浏览(47)
  • 【U3D引擎】没有切换中文选项&切换中文模式?

    第一步,查看是否有勾选简体中文模块 第二步,拉到底部,勾选简体中文,点击继续 第三步,勾选已阅读同意后点击安装 第四步,等待下载安装完成 过程中会自动安装VS软件 如有下载失败可重新下载 注:如果重复提示错误也没有没有关系,直接略过就好, 第五步,随便打

    2024年02月06日
    浏览(73)
  • 23. Unity - 3D游戏开发小计02 --- 动画结束UI、导航网格代理、场景搭建插件(ProGrids,ProBuilder,Polybrush)

    1. 动画结束UI 一个游戏在通过后,都是需要一个界面显示当前游戏已经结束,即需要给游戏添加一个结束的界面,可以做一个简单的游戏结束界面,用一个图片展示: 首先在 层级窗口 添加两层UI中的Image,其中第一层的Image仅作背景,可将其填充颜色设置为纯黑色,第二层的

    2024年02月05日
    浏览(58)
  • AVProVideo☀️一、一款U3D视频播放插件介绍

    🎊 商务合作:https://skode.cn/file/businesscard/wechat.jpg 🎥 本文由 星河造梦坊公司官方 原创! 🏅 如果你有技术问题或项目开发,都可以加上方的联系方式,和我聊一聊你的故事🧡 前段时间看到有人问: 橙哥,AVProVideo支持8K全景视频嘛? 看来,好多人对这款插件的支持的功能

    2024年02月07日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包