Unity进阶-ui框架学习笔记

2023-11-15

Unity进阶-ui框架学习笔记

笔记来源课程:https://study.163.com/course/courseMain.htm?courseId=1212756805&_trace_c_p_k2_=8c8d7393c43b400d89ae94ab037586fc

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qvYhS3e7-1690019993960)(QQ%E6%88%AA%E5%9B%BE20230722085931.png)]

  • 最上面的管理层(canvas)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x9NEL12X-1690019993961)(QQ%E6%88%AA%E5%9B%BE20230722093841.png)]

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UImanager : MyrSingletonBase<UImanager>
{
    //下层控制器的字典
    public Dictionary<string, UIController> UIControllerDic = new Dictionary<string, UIController>();
    void Start()
    {
     
    }

    //设置页面激活状态
    public void SetActive(string controllerName, bool active){
        transform.Find(controllerName).gameObject.SetActive(active);
    }

    //获取页面上的子控件
    public UIControl GetUIControl(string controllerName, string controlName){
            //这个字典里是否存在该名称的组件
        if (UIControllerDic.ContainsKey(controllerName)) {
            //它下面的字典里是否存在对应组件
            if (UIControllerDic[controllerName].UIControlDic.ContainsKey(controlName)) {
                return UIControllerDic[controllerName].UIControlDic[controlName];
            }
        }
        return null;
    }

}


调整下运行顺序,让他快于controller

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L7BTY0Xp-1690019993962)(../AppData/Roaming/Typora/typora-user-images/image-20230722171921737.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-smOfAPvE-1690019993962)(../AppData/Roaming/Typora/typora-user-images/image-20230722171854565.png)]

  • panel的控制层

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uukx7lHB-1690019993964)(QQ%E6%88%AA%E5%9B%BE20230722094215.png)]

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UIController : MonoBehaviour
{
    //下层控制器的字典
    public Dictionary<string, UIControl> UIControlDic = new Dictionary<string, UIControl>();

    void Awake() {
        //添加到UI控制器的字典里
        UImanager.Instance.UIControllerDic.Add(transform.name, this);
        //给子控件加上UIcontrol脚本
        foreach (Transform tran in transform) {
            if (tran.gameObject.GetComponent<UIControl>() == null) {
                tran.gameObject.AddComponent<UIControl>();
            }
        }
    }
  
}

  • panel下面的组件层

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qaDs5oQV-1690019993965)(QQ%E6%88%AA%E5%9B%BE20230722094906.png)]

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;

public class UIControl : MonoBehaviour
{
    //父控制器
    public UIController controller;
    private void Awake() {
        //将自身添加到父级控制器上
        if (transform.parent != null) {
            controller = transform.GetComponentInParent<UIController>();
            if (controller != null) {
                controller.UIControlDic.Add(transform.name, this);
            }
        } 
    }

    ///<summary>
    /// 各个组件对应的函数
    ///</summary>

    //更改文本
    public void ChangetText(string str) {
        if (GetComponent<Text>() != null) {
            GetComponent<Text>().text = str;
        }
    }
    
    //更改图片
    public void ChangeImage(Sprite sprite) {
        if(GetComponent<Image>() != null) {
            GetComponent<Image>().sprite = sprite;
        }
    }

    //输入
    public void AddInputFieldEvent(UnityAction<string> action){
        InputField control = GetComponent<InputField>();
        if (control != null) {
            control.onValueChanged.AddListener(action);
        }
    }

    //Slider
    public void AddSliderEvent(UnityAction<float> action){
        Slider control = GetComponent<Slider>();
        if (control != null) {
            control.onValueChanged.AddListener(action);
        }
    }

    //Button
    public void AddButtonClickEvent(UnityAction action) {
        Button control = GetComponent<Button>();
        if (control != null) {
            control.onClick.AddListener(action);
        }
    }
}


  • 使用

    UImanager.Instance.GetUIControl("score", "scores").ChangetText("分数:" +  score);
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity进阶-ui框架学习笔记 的相关文章

  • redis 实现乐观锁

    redis是单线程程序但是支持多进程同时访问同一个redis服务 这个时候就需要锁机制来处理一些并发问题 redis提供了watch指令来实现乐观锁 watch和事务配合使用 往往写在multi之前 用来监视一个key 比如watch mo
  • 实战wxPython:047 - Book控件(第一部分)

    在wxPython中 book控件允许用户在各种面板之间切换 最常见的例子是带有选项卡界面的浏览器和系统选项对话框 本文将向您介绍这些控件的创建和基本配置 wxPython目前内置了多个这样的控件 除文章 wxPython 高级控件之选项卡
  • 看完这篇 教你玩转渗透测试靶机Vulnhub——Grotesque:3.0.1

    Vulnhub靶机Grotesque 3 0 1渗透测试详解 Vulnhub靶机介绍 Vulnhub靶机下载 Vulnhub靶机安装 信息收集 漏洞发现 LFI漏洞利用 本地文件包含漏洞 SSH登入 提权 获取FLAG Vulnhub靶机渗
  • pyqt 万能简易模板(四)

    本文将介绍一些pyqt5基本使用技巧 不借助Qtdesigner 而是全部用代码编写 将实现页面布局 窗口自适应 字体自适应等功能 一般的简易工程均可使用 简单高效 对于pyqt5的一些基本技巧 本文内容基本够用 可以快速实现自己想要的界面
  • Java中的如何检测字符串是否相等

    文章目录 0 写在前面 1 介绍 2 举例 3 写在后面 0 写在前面 实际业务中有时候得检测字符串是否相等的场景 例如在数据库中提取uuid 检测两个uuid是否相等就需要用到这个地方 1 介绍 可以使用equals方法检测两个字符串是否
  • 数据预处理、特征工程和特征学习

    神经网络的数据预处理 数据预处理的目的是使原始数据更适于用神经网络处理 包括向量化 标准化 处理缺失值和特征提取 1 向量化 神经网络的所有输入和目标都必须是浮点数张量 特定情况下为整数张量 无论处理什么数据 都必须先将其转换为张量 这一步
  • Spring getBean方法源码解析

    User user User beanFactory getBean user 注 User为一普通bean 查看方法 AbstractBeanFactory getBean public Object getBean String nam

随机推荐

  • 朴素贝叶斯 Naive Bayes

    Naive Bayes 特点 朴素贝叶斯是典型的生成学习方法 朴素贝叶斯的基本假设是条件独立性 强假设 若条件之间存在概率依存关系 模型变为贝叶斯网络 基于上一条的假设 朴素贝叶斯方法高效 但分类性能受损 将输入的 x 分类到后验概率最大的
  • 五号黯区靶场 mysql 注入之limit注入记录

    前言 感谢五号黯区团队 limit 功能 通常在分页处 比如page 字段 可能存在 limit注入 不存在order by http bug cc 86 limit limit php p 1 访问靶场如下图 原数据库语句如下 selec
  • python数组做参数_python函数传递数组参数吗

    函数是任何一门编程语言都不可缺少的 而且也是非常重要的一部分 Python中函数的参数 可以分为以下几类 位置参数 有时也称必备参数 指的是必须按照正确的顺序将实际参数传到函数中 换句话说 调用函数时传入实际参数的数量和位置都 必须和定义函
  • vue 项目使用通过经纬度显示地图

    传入经纬度 和缩放值
  • 最新的一篇视觉Transformer综述!

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 作者 闪闪红星闪闪 已授权转载 源 知乎 https zhuanlan zhihu com p 433048484 CVer公众号已汇集三篇视觉Transformer
  • Tizen手机系统新“鲶鱼”

    转自 http mobile 51cto com comment 380564 htm 手机操作系统很有可能在2013年上演 巅峰之战 Tizen等基于HTML5技术的新产品 将成为搅动市场的鲶鱼 AD 2013云计算架构师峰会课程资料下载
  • 回归分析的假设条件

    数据什么样就能扔进回归分析回归分析
  • registry :分支操作值Archive有什么用?

    1 美图 2 背景 想知道registry 分支操作值Archive有什么用 于是点击修改了一下 修改之后看着好像没什么变化 结果发现不能更改了 只能添加新的版本了 但是服务器上改了之后导致 Registry THERE IS NOT VE
  • 数据库基础——10.子查询

    这篇文章来讲一下数据库的子查询 目录 1 需求分析与问题解决 1 1 实际问题 1 2 子查询的基本使用 1 3 子查询的分类 2 单行子查询 2 1 单行比较操作符 2 2 代码示例 2 3 HAVING 中的子查询 2 4 CASE中的
  • Vue详解及综合案例

    一 Vue简介 1 1 简介 Vue 读音 vju 类似于 view 是一套用于构建用户界面的渐进式的js框架 发布于 2014 年 2 月 与其它大型框架不同的是 Vue 被设计为可以自底向上逐层应用 Vue 的核心库只关注视图层 不仅易
  • CH347读取MPU6050传感器数据和显示

    CH347读取MPU6050传感器数据和显示 MPU6050 是一款集成了六轴加速度计和陀螺仪的微电子机械系统 MEMS 传感器 它由 InvenSense 现为 TDK 公司开发 是一种广泛应用于姿态估计 运动追踪和稳定控制等领域的常用传
  • 链表 删除链表中的节点

    LC 删除链表中的节点 请编写一个函数 用于 删除单链表中某个特定节点 在设计函数时需要注意 你无法访问链表的头节点 head 只能直接访问 要被删除的节点 题目数据保证需要删除的节点 不是末尾节点 输入 head 4 5 1 9 node
  • ERROR: Could not find a version that satisfies the requirement xxxxx (from versions: none)解决办法

    报错 ERROR Could not find a version that satisfies the requirement tensorboard 1 14 0 from versions none ERROR No matching
  • css中使用url不提示文件路径/不加载文件名

    情况一 若你输入 时不提示文件名时 检查你的插件 在插件商店里找到上述两款插件并且安装 安装完成后若出现 情况二 提示文件回车却不出现文件扩展名 如图 此时检查vscode中的设置 vscode左下的设置找到 L path autocomp
  • Qt 停靠悬浮窗口 使用实例

    工程中我们常用到悬浮窗口 Qt 实现停靠和悬浮使用类QDockWidget 效果 悬浮窗口 这里主要介绍怎么使用 Part1 使用流程 1 创建QDockWidget对像的停靠窗体 QDockWidget dw new QDockWidge
  • 多元有序logistic回归分析_SPSS:二元Logistic回归中自变量的处理和解读——有序多分类变量的处理...

    SPSS 二元Logistic回归中自变量的处理和解读 有序多分类变量的处理 有序多分类变量是很常见的变量形式 通常在变量中有多个可能会出现的取值 各取值之间还存在等级关系 比如高血压分级 0 正常 1 正常高值 2 1级高血压 3 2级高
  • IT大学生成长周报

    文章目录 IT大学生成长周报 第 1 期 编程语言 插桩 Linux高性能服务器代码学习 关于Mysql锁的一些知识和试验 一道关于array的题目 go spew Mysql为什么这么重要 Go编程模式 详解函数式选项模式 Go 1 18
  • 你可能不知道的 Android Studio 小技巧之「多行编辑」

    http blog csdn net googdev article details 52865094 Android Studio 大家应该都很熟悉了 但是可能很多人都仅限基本的功能使用 而 Android Studio 非常强大 有很多
  • 【模拟电路】3.3V供电的STM32如何输出5V电压,通过NPN三极管提供两种方法解决问题。

    STM8和STM32的供电电压如下 STM8 2 95 5 5V STM32 2 0 3 6V 我们都知道STM32的供电电压一般是3 3V 但有时我们需要5V输出 这时应该怎么办呢 下面提供两种比较常见的用法 我们都知道S8050是NPN
  • Unity进阶-ui框架学习笔记

    文章目录 Unity进阶 ui框架学习笔记 Unity进阶 ui框架学习笔记 笔记来源课程 https study 163 com course courseMain htm courseId 1212756805 trace c p k2