Unity3d C#利用Editor编辑器拓展实现配置UI背景样式一键设置UI背景样式功能(含源码)

前言

在开发UI滚动列表的时候,经常会有每项的背景图不统一的情况,会间隔重复的情况居多。这种情况下,手动去设置间隔一行的背景图或者颜色是比较麻烦的。在此背景下,笔者尝试写个小工具,在搭建UI时配置一下循环背景的样式,可以通过一键点击后设置UI背景的样式,省去繁琐的过程,如果多个列表的样式更改,也提供全局的一键设置背景设置按钮。同时提供了动态设置的接口,方便在动态请求数据的时候设置背景样式。

效果

一键全局设置:
在这里插入图片描述

单独设置:

在这里插入图片描述

实现过程

其核心思路是对UI的image组件的颜色和图片进行修改,配置的样式为数组的形式,通过循环的方式,遍历每个子节点和配置的样式,循环滚动的设置。至于Unity3d的编辑器扩展则是在Editor文件夹下,继承Editor类,通过GUILayout.Button新增设置背景的按钮。[MenuItem("0)]来新增菜单的设置按钮。本工程是基于Unity3d 2020.3.28f1c1个人版本实现,其它版本可能会有不兼容情况,请慎重使用。

UI搭建

UI的搭建也是常规的,Scroll Rect组件、Text和图片等组件构成。只不过需要注意的是,设置的背景图的额节点是兄弟节点,这个规则也可以按需要自行修改规则和代码。
在这里插入图片描述

编辑器扩展

单独设置的按钮:
在这里插入图片描述

这里是每个配置项的Inspector中可以单独进行点击,通过编写脚本的Editor的OnInspectorGUI函数进行实现:

public override void OnInspectorGUI(){DrawDefaultInspector();SetItemBGMgr bgMgr = (SetItemBGMgr)target;if (GUILayout.Button("设置子节点背景样式",new GUILayoutOption[] { GUILayout.ExpandWidth(false) })){bgMgr.SetItemChildrenBG();}}

一键全局设置:
在这里插入图片描述

通过判断UNITY_EDITOR编辑器下才生效,否则打包会报错。通过MenuItem新增一个菜单选项,并设置了快捷键Shift + B

#if UNITY_EDITOR[MenuItem("设置子节点背景/刷新所有 #b", false, 1000)]
#endifpublic static void RefreshAllItemBG(){Debug.Log("刷新所有背景");
/*        SetItemBGMgr[] sim = Transform.root..<SetItemBGMgr>(true);for (int i = 0; i < sim.Length; i++)sim[i].SendMessage("SetItemChildrenBG");*/instance?.BroadcastMessage("SetItemChildrenBG");}

这里的一键全局设置功能有一些需要说明一下的点,由于使用了BroadcastMessage函数来广播消息,所以SetAllBGMgr需要挂在跟节点上,这样才能将消息广播到各个节点。还有一点是如果被设置的UI是active为false的状态时,是不会进行刷新的,因为它收不到广播的消息。后续会看这个问题有没有优化空间。

样式功能

样式的配置如图:

主要是图片和颜色的数组,默认是设置图片的数组,如果需要图片+颜色的模式需要勾选IsSpAndCol选项。
配置参数的代码如下:

    [Header("背景图片(优先生效)")]public Sprite[] sprites;[Header("背景颜色")][Tooltip("优先级低于图片,IsSpAndCol时也生效,注意颜色数量和图片数量得一致")]public Color32[] colors;[Header("图片和颜色都生效")][Tooltip("注意颜色数量和图片数量得一致")]public bool IsSpAndCol = false;

脚本在收到广播SetItemChildrenBG消息的时候,会进行样式的刷新:

for (int i = 0; i < transform.childCount; i++){Image TempImg = transform.GetChild(i).GetComponent<Image>();if (TempImg){if (!TempImg.gameObject.activeSelf)continue;if (sprites != null && sprites.Length > 0){TempImg.sprite = sprites[idx];if (IsSpAndCol) {if (colors != null && colors.Length > 0 && idx < colors.Length){TempImg.color = colors[idx];}else{Debug.LogWarning("设置背景样式失败,请检查[" + transform.name + "]的背景颜色配置");}}idx = (idx >= (sprites.Length - 1)) ? 0 : idx+1;}else if (colors != null && colors.Length > 0){TempImg.color = colors[idx];idx = (idx>=(colors.Length -1))?0:idx++;}else{Debug.LogWarning("设置背景样式失败,请检查["+ transform.name+"]的背景图片/颜色配置");}}else {Debug.LogWarning(transform.GetChild(i).name + " 设置背景样式失败,请检查其是否有Image组件");}}

如果动态请求数据(如:请求api的数据进行刷新UI时),等子节点全部创建而且数据全部刷新完成后,代码中调用一次即可

SetItemChildrenBG();

由于这里的样式需求是在预先搭建UI和动态请求数据刷新的情况,而且有active为false的情况下全局无效的情况。如果为了确保设置的样式肯定会生效,可以尝试在Start()函数中刷新一遍样式:

    void Start(){SetItemChildrenBG();}

源码工程

https://download.csdn.net/download/qq_33789001/88644030
无法打开说明审核未通过。

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

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

相关文章

《数据结构、算法与应用C++语言描述》- 最小赢者树模板的C++实现

赢者树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_30winnerTree 比赛规则 假定有 n 个选手参加一次网球比赛。比赛规则是“突然死亡法”(sudden-death mode)&#xff1a;一名选手只要输掉一场球&#xff0c;就被淘汰。一对一对…

fill-in-the-middle(FIM) 实现与简单应用

1 背景 传统训练的 GPT 模型只能根据前文内容预测后文内容&#xff0c;但有些应用比如代码生成器&#xff0c;需要我们给出上文和下文&#xff0c;使模型可以预测中间的内容&#xff0c;传统训练的 GPT 就不能完成这类任务。 传统训练的 GPT 只能根据上文预测下文 使用 FIM…

vue-element安装富文本编辑器vue-quill-editor教程

在vue ui面板中安装vue-quill-editor依赖 命令安装 npm install vue-quill-editor --save # or yarn add vue-quill-editor 使用方法 在main.js导入富文本编辑器 import VueQuillEditor from vue-quill-editor import quill/dist/quill.core.css // import styles import…

技术博客:市面上加密混淆软件的比较和推荐

技术博客&#xff1a;市面上加密混淆软件的比较和推荐 引言 市面上有许多加密混淆软件可供开发者使用&#xff0c;但哪些软件是最好用的&#xff1f;哪些软件受到开发者的喜爱&#xff1f;本文将根据一次在CSDN上的投票结果&#xff0c;为大家介绍几款在程序员中普及度较高的…

CEC2013(python):五种算法(ABC、PSO、CSO、OOA、DBO)求解CEC2013(python代码)

一、五种算法简介 1、人工蜂群算法 &#xff08;Artificial Bee Colony Algorithm, ABC&#xff09; 2、粒子群优化算法PSO 3、鸡群优化算法CSO 4、鱼鹰优化算法OOA 5、蜣螂优化算法DBO 二、5种算法求解CEC2013 &#xff08;1&#xff09;CEC2013简介 参考文献&#xff…

机器学习 项目结构 数据预测 实验报告

需求&#xff1a; 我经过处理得到了测试值&#xff0c;然后进一步得到预测和真实值的比较&#xff0c;然后再把之前的所有相关的参数、评估指标、预测值、比较结果都存入excel,另外我还打算做测试报告模板&#xff0c;包括敏感性分析等。您建议我这些功能如何封装这些功能&…

源码部署MySQL

MySQL 1.准备环境 关闭防火墙 [rootlocalhost ~]#systemctl stop firewalld [rootlocalhost ~]#systemctl disable firewalld 关闭selinux [rootlocalhost ~]#setenforce 0 [rootlocalhost ~]#sed -i %s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config 验证是否通网 …

WINDOWS(WIN11)通过IP添加网络打印机

点击添加设备 点击手动添加 使用IP地址或主机名添加打印机 选择TCP/IP设备&#xff0c;输入打印机地址 如果有正确驱动就安装&#xff0c;没有就取消。 通过手动设置添加本地打印机或网络打印机 使用现有的端口 根据打印机IP&#xff0c;选择标准端口。 成功&#xff01; 到…

警惕Kann勒索病毒的最新变种.kann,您需要知道的预防和恢复方法。

导言&#xff1a; 勒索病毒已经成为网络安全的一大威胁&#xff0c;其中之一就是.kann勒索病毒。本文将深入介绍.kann勒索病毒&#xff0c;包括其攻击方式、数据加密机制&#xff0c;以及如何有效恢复被加密的数据文件&#xff0c;并提供一系列预防措施以保护系统免受.kann勒索…

element ui el-avatar 源码解析零基础逐行解析

avatar功能介绍 快捷配置头像的样式 avatar 的参数配置 属性说明参数size尺寸type string 类型 &#xff08;‘large’,‘medium’,‘small’&#xff09;number类型 validator 校验shape形状circle (原型) square&#xff08;方形&#xff09;icon传入的iconsrc传入的图片st…

阿里lindorm与MyBatis Plus集成

lindorm与MyBatis Plus集成 1 添加依赖&#xff1a; 在项目的pom.xml文件中添加lindorm和MyBatis Plus的依赖。 <dependencies><dependency><groupId>com.alibaba</groupId><artifactId>lindorm-jdbc</artifactId><version>1.1.1…

机器学习笔记:支持向量机回归SVR

1 主要思想 主要思路类似于机器学习笔记&#xff1a;支持向量机SVM_支撑向量学习-CSDN博客 和SVM的区别主要有 解法和SVM区别不大&#xff0c;也是KKT 2 和线性回归的区别 对SVR&#xff0c;如果f(x)和y之间的差距小于阈值ε【也即落在两条间隔带之间】&#xff0c;则不计算…

SQL面试题挑战03:奖金瓜分问题(拼多多)

目录 问题&#xff1a;SQL解答&#xff1a; 问题&#xff1a; 在活动大促中&#xff0c;有玩游戏瓜分奖金环节。现有奖金池为10000元&#xff0c;代表奖金池中的初始额度。用户的分数信息如下&#xff1a; user_id score 100 60 101 45 102 40 103 3…

模拟组建网络的过程

DNS是域名系统&#xff0c;作用是将域名解析成ip地址 要求 1.使用172.16.0.0网段组建网络 2.使用3台pc&#xff0c;可以配置DHCP服务自动分配ip 3.添加两个网站服务器 第一台是www.taobao.com 第二台www.jd.com 他们可以通过DNS服务器为客户解析域名 172开头的是B类ip地…

标准库中的string类(上)——“C++”

各位CSDN的uu们好呀&#xff0c;好久没有更新小雅兰的C专栏的知识啦&#xff0c;接下来一段时间&#xff0c;小雅兰就又会开始更新C这方面的知识点啦&#xff0c;以及期末复习的一些知识点&#xff0c;下面&#xff0c;让我们进入西嘎嘎string的世界吧&#xff01;&#xff01;…

【论文简述】High-frequency Stereo Matching Network(CVPR 2023)

一、论文简述 1. 第一作者&#xff1a;Haoliang Zhao 2. 发表年份&#xff1a;2023 3. 发表期刊&#xff1a;CVPR 4. 关键词&#xff1a;立体匹配、MVS、深度学习、高频信息、LSTM 5. 探索动机&#xff1a;(1)当涉及到估计的视差图的更精细的特征时&#xff0c;大多数当前…

Java反序列化工具ysoserial使用

ysoserial是一款用于生成 利用不安全的Java对象反序列化 的有效负载的概念验证工具。 项目地址 https://github.com/frohoff/ysoserial主要有两种使用方式&#xff0c;一种是运行ysoserial.jar 中的主类函数&#xff0c;另一种是运行ysoserial中的exploit 类&#xff0c;二者…

蓝桥杯-每日刷题-023

统计字符 一、题目要求 题目描述 给出一个字符串&#xff0c;统计其中的英文字母、空格、数字的个数。输入格式 输入一行&#xff0c;为给定字符串输出格式 输出参考样例。输入样例 aaaaaa 11111 2223www输出样例 letter9 space2 digit9 二、完整代码 #include <iostrea…

未来十年,人工智能就业方向及前景如何?

人工智能&#xff08;AI&#xff09;是一个快速发展的领域&#xff0c;对于未来的就业方向和前景有着巨大的影响。以下是一些可能的发展趋势和就业前景&#xff1a; 1、增长趋势&#xff1a;人工智能正在全球范围内经历巨大的增长&#xff0c;预计在未来十年内将继续保持这一趋…

一个正则快速找到在ES中使用profile的时产生慢查询的分片

在es中使用profile分析慢查询的时候&#xff0c;往往因为分片过多&#xff0c;或者因为查询条件太复杂&#xff0c;分析的结果几十万行。在kibana上点半天&#xff0c;也找不到一个耗时长的分片。 kibana上可以通过正则来匹配。其实我们只需要匹配到耗时大于10秒的请求。 检索语…