当前位置: 首页 > news >正文

【Unity3D】UI Toolkit自定义元素

1 前言

        UI Toolkit 支持通过继承 VisualElement 实现自定义元素,便于通过脚本控制元素。另外,UI Toolkit 也支持将一个容器及其所有子元素作为一个模板,便于通过脚本复制模板。

        如果读者对 UI Toolkit 不是太了解,可以参考以下内容。

  • UI Toolkit简介
  • UI Toolkit容器
  • UI Toolkit元素
  • UI Toolkit样式选择器

2 自定义元素 

        1)UI 搭建

        搭建 UI 如下,其中 Background 和 MyContainer 是 VisualElement,NameLab 是 Label,ActionBtn 是 Button。

        TestCustom.uxml

<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False"><ui:VisualElement name="Background" style="flex-grow: 1; background-color: rgb(168, 156, 156);"><ui:VisualElement name="MyContainer" style="width: 300px; height: 250px; background-color: rgb(177, 185, 121); align-items: center; justify-content: center; margin-left: 20px; margin-right: 20px; margin-top: 20px; margin-bottom: 20px;"><ui:Label text="Name" display-tooltip-when-elided="true" name="NameLab" style="font-size: 50px; -unity-text-align: middle-center; margin-top: 10px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; padding-left: 0; padding-right: 0; padding-top: 0; padding-bottom: 0;" /><ui:Button text="Button" display-tooltip-when-elided="true" name="ActionBtn" style="font-size: 50px; margin-left: 10px; margin-right: 10px; margin-top: 10px; margin-bottom: 10px; background-color: rgb(217, 126, 40); justify-content: center; align-items: center;" /></ui:VisualElement></ui:VisualElement>
</ui:UXML>

         显示如下。

        2)创建模板

        选中 MyContainer,右键弹出菜单,选择 Create Template,选择 Resources 目录下保存 MyContainer.uxml 文件。

        保存模板后,Hierarchy 层级结构如下。可以看到,原来的 MyContainer 变成不可编辑的了,并且其上又套了一个空对象。这里先删去新的 MyContainer,只留下 Background,后面会通过脚本加载 MyContainer。

        3)自定义元素

        MyContainer.cs

using UnityEngine;
using UnityEngine.UIElements;public class MyContainer : VisualElement {private TemplateContainer container;// 便于在UI Builder中导入自定义UI, 需要有无参构造函数public new class UxmlFactory : UxmlFactory<MyContainer> {}public MyContainer() {container = Resources.Load<VisualTreeAsset>("MyContainer").Instantiate();container.style.flexGrow = 1.0f;hierarchy.Add(container);}public MyContainer(int index) : this() {Label label = container.Q<Label>();label.text = "Name" + index;Button button = container.Q<Button>();button.clicked += () => Debug.Log("index=" + index);}
}

        编译后,在 UI Builder 中可以看到自定义的 UI,可以像内置 UI 一样拖拽到 Hierarchy 中使用。将鼠标悬浮在 MyContainer.cs 上,会弹出 UI 预览效果,如下。

        4)加载元素

        UILoader.cs

using UnityEngine;
using UnityEngine.UIElements;public class UILoader : MonoBehaviour {private VisualElement root;private void Awake() {root = GetComponent<UIDocument>().rootVisualElement;var bodyContainer = root.Q("Background");bodyContainer.Clear();for(int i = 0; i < 3; i++) {MyContainer customContainer = new MyContainer(i);bodyContainer.Add(customContainer);}}
}

        5)运行效果

        依次点击 3 个按钮,打印日志如下。

相关文章:

【Unity3D】UI Toolkit自定义元素

1 前言 UI Toolkit 支持通过继承 VisualElement 实现自定义元素&#xff0c;便于通过脚本控制元素。另外&#xff0c;UI Toolkit 也支持将一个容器及其所有子元素作为一个模板&#xff0c;便于通过脚本复制模板。 如果读者对 UI Toolkit 不是太了解&#xff0c;可以参考以下内容…...

layui手机端使用laydate时间选择器被输入法遮挡的解决方案

在HTML中&#xff0c;你可以使用input元素的readonly属性来禁止用户输入&#xff0c;但是这将完全禁用输入&#xff0c;而不仅仅是禁止弹出输入法。如果你想允许用户在特定条件下输入&#xff0c;你可以使用JavaScript来动态地切换readonly属性。 readonly属性 增加readonly属…...

MVSNet CVPR-2018 学习总结笔记 译文 深度学习三维重建

文章目录 2 MVSNet CVPR-20182.0 主要特点2.1 过程2.2 MVSNet主要贡献2.3 论文简介2.3.1 深度特征提取2.3.2 构造匹配代价2.3.3 代价累计2.3.4 深度估计2.3.5 深度图优化2.4 MVSNet(pytorch版本)2 MVSNet CVPR-2018 MVSNet (pytorch版) 代码注释版 下载 (注释非常详细,代码…...

Kafka/Spark-01消费topic到写出到topic

1 Kafka的工具类 1.1 从kafka消费数据的方法 消费者代码 def getKafkaDStream(ssc : StreamingContext , topic: String , groupId:String ) {consumerConfigs.put(ConsumerConfig.GROUP_ID_CONFIG , groupId)val kafkaDStream: InputDStream[ConsumerRecord[String, Strin…...

【算法与数据结构】98、LeetCode验证二叉搜索树

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;注意不要落入下面你的陷阱&#xff0c;笔者本来想左节点键值<中间节点键值<右节点键值即可&…...

关于GitHub Desktop中的“Open in Git Bash”无法使用的问题

问题描述 在GitHub Desktop中选择Repository--Open in Git Bash&#xff08;如图1&#xff09;&#xff0c;出现如图2所示结果。 图1 图2 解决办法&#xff08;Windows10&#xff09; 这个问题是由于Git的环境变量没有得到正确配置所导致的&#xff0c;所以需要正确设置环境变量…...

使用DeepSpeed加速大型模型训练(二)

使用DeepSpeed加速大型模型训练 在这篇文章中&#xff0c;我们将了解如何利用Accelerate库来训练大型模型&#xff0c;从而使用户能够利用DeeSpeed的 ZeRO 功能。 简介 尝试训练大型模型时是否厌倦了内存不足 (OOM) 错误&#xff1f;我们已经为您提供了保障。大型模型性能非…...

ASP.net web应用 GridView控件常用方法

GridView 控件是 ASP.NET Web Forms 中常用的数据展示控件之一。它提供了一个网格形式的表格&#xff0c;用于显示和编辑数据。GridView 控件对于包含大量数据、需要进行分页、排序和筛选的情况非常有用。 GridView 控件的主要特性包括&#xff1a; 数据绑定&#xff1a;GridV…...

MATLAB入门一基础知识

MATLAB入门一基础知识 此篇为课程学习笔记 链接: link 什么是MATLAB 平时所说的MATLAB既是一款软件又是一种编程语言&#xff0c;只是这种高级解释性语言是在配套的软件下进行开发的 MATLAB的一个特性 MATLAB的一个特性&#xff0c;如果一条语句以英文分号‘;’结尾&…...

SpringMVC实现文件上传和下载功能

文件下载 ResponseEntity用于控制器方法的返回值类型&#xff0c;该控制器方法的返回值就是响应到浏览器的响应报文。具体步骤如下&#xff1a; 获取下载文件的位置&#xff1b;创建流&#xff0c;读取文件&#xff1b;设置响应信息&#xff0c;包括响应头&#xff0c;响应体以…...

CHS零壹视频恢复程序OCR使用方法

目前CHS零壹视频恢复程序监控版、专业版、高级版已经支持了OCR&#xff0c;OCR是一种光学识别系统&#xff0c;通俗说就和扫描仪带的OCR软件一样的原理&#xff1a; 分析照片->OCR获取字符串->整理字符串->输出 使用方法如下&#xff08;以CHS零壹视频恢复程序监控版…...

云备份——服务端客户端联合测试

一&#xff0c;准备工作 服务端清空备份文件信息、备份文件夹、压缩文件夹 客户端清空备份文件夹 二&#xff0c;开始测试 服务端配置文件 先启动服务端和客户端 向客户端指定文件夹放入稍微大点的文件&#xff0c;方便后续测试断点重传 2.1 上传功能测试 客户端自动上传成功…...

L2 数据仓库和Hive环境配置

1.数据仓库架构 数据仓库DW主要是一个用于存储&#xff0c;分析&#xff0c;报告的数据系统。数据仓库的目的是面向分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持。-DW不产生和消耗数据 结构数据&#xff1a;数据库中数据&#xff0c;CSV文件 直接导入DW非结构…...

【iOS】MVC

文章目录 前言一、MVC各层职责1.1、controller层1.2、model层1.3、view层 二、总结三、优缺点3.1、优点3.2、缺点 四、代码示例 前言 MVC模式的目的是实现一种动态的程序设计&#xff0c;使后续对程序的修改和扩展简化&#xff0c;并且使程序某一部分的重复利用成为可能。除此…...

JavaScript-----jQuery

目录 前言&#xff1a; 1. jQuery介绍 2. 工厂函数 - $() jQuery通过选择器获取元素&#xff0c;$("选择器") 过滤选择器&#xff0c;需要结合其他选择器使用。 3.操作元素内容 4. 操作标签属性 5. 操作标签样式 6. 元素的创建,添加,删除 7.数据与对象遍历…...

Stream流

Stream操作流 在Java 8中&#xff0c;得益于Lambda所带来的函数式编程&#xff0c;引入了一个全新的Stream概念&#xff0c;用于解决已有集合类库既有的弊端。 1.1 集合的迭代 几乎所有的集合&#xff08;如 Collection 接口或 Map 接口等&#xff09;都支持直接或间接的迭代…...

javaee spring 声明式事务管理方式2 注解方式

spring配置文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:context"http://www.springframewo…...

基于SpringBoot+微信小程序的智慧医疗线上预约问诊小程序

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 近年来&#xff0c;随…...

注意力机制讲解与代码解析

一、SEBlock(通道注意力机制) 先在H*W维度进行压缩&#xff0c;全局平均池化将每个通道平均为一个值。 &#xff08;B, C, H, W&#xff09;---- (B, C, 1, 1) 利用各channel维度的相关性计算权重 (B, C, 1, 1) --- (B, C//K, 1, 1) --- (B, C, 1, 1) --- sigmoid 与原特征相…...

微调 TrOCR – 训练 TrOCR 识别弯曲文本

TrOCR(基于 Transformer 的光学字符识别)模型是性能最佳的 OCR 模型之一。在我们之前的文章中,我们分析了它们在单行打印和手写文本上的表现。然而,与任何其他深度学习模型一样,它们也有其局限性。TrOCR 在处理开箱即用的弯曲文本时表现不佳。本文将通过在弯曲文本数据集上…...

如何快速上手Podgrab:5分钟搭建个人播客下载中心完整指南

如何快速上手Podgrab&#xff1a;5分钟搭建个人播客下载中心完整指南 【免费下载链接】podgrab A self-hosted podcast manager/downloader/archiver tool to download podcast episodes as soon as they become live with an integrated player. 项目地址: https://gitcode.…...

使用DSP280049的CLB做LLC硬件同步整流

一、根据epwm1a配置1pwm2a。一&#xff09;搭建自己的第一部分clb结构如下&#xff1a;1.配置输入配置clb输入&#xff0c;配置输入选择epwm1a的zero与compA。input0是上升沿&#xff0c;input1是下降沿。2.配置计数器配置计数器&#xff0c;计数器重新计数配置成pwm1a上升沿。…...

惠普开发了一架3D打印无人机,超轻、超快组装、成功试飞!

3D打印技术参考注意到&#xff0c;惠普于日前自行开发了一架基于增材制造设计的结构优化无人机&#xff0c;来展示使用其MJF技术进行3D打印制造的巨大潜力。它的核心观点是&#xff0c;无人机开发与制造的一个重大挑战&#xff0c;是团队花了几个月时间进行的优化设计&#xff…...

北京数据恢复公司排名哪家好

在当今数字化时代&#xff0c;数据的重要性不言而喻。无论是个人用户的珍贵照片、文档&#xff0c;还是企业的重要业务数据&#xff0c;一旦丢失都可能造成巨大的损失。在北京&#xff0c;有众多的数据恢复公司&#xff0c;如何选择一家靠谱的公司成为了许多人关心的问题。下面…...

云原生本地开发新范式:LDLT方法论与实践指南

1. 项目概述&#xff1a;从“LDLT”看云原生时代的本地开发范式革新如果你是一名云原生应用的开发者&#xff0c;大概率经历过这样的场景&#xff1a;为了调试一个微服务&#xff0c;你需要在本地启动一整套依赖——数据库、消息队列、缓存、甚至其他几个关联服务。你的开发机内…...

基于fnos-apps框架构建智能对话应用:从技能编排到生产部署

1. 项目概述&#xff1a;一个为现代对话应用而生的开源工具箱最近在折腾一个基于大语言模型的客服机器人项目&#xff0c;在集成各种外部工具和API时&#xff0c;遇到了一个老生常谈的问题&#xff1a;每个工具都有自己的调用方式、认证逻辑和错误处理&#xff0c;代码里很快就…...

Gemini实时字幕在Google Meet中延迟超800ms?揭秘谷歌内部SRE监控数据与3步毫秒级调优法

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Gemini实时字幕在Google Meet中延迟超800ms&#xff1f;揭秘谷歌内部SRE监控数据与3步毫秒级调优法 谷歌内部SRE团队近期公开的一组匿名化监控数据显示&#xff1a;在高并发&#xff08;>500人&…...

服务器运维与DevOps融合:迈向智能化运维的新纪元

在数字化浪潮席卷全球的今天&#xff0c;企业对IT基础设施的依赖程度日益加深&#xff0c;服务器运维作为支撑业务连续性和系统稳定性的核心环节&#xff0c;正面临前所未有的挑战与机遇。传统运维模式依赖人工干预、响应滞后、效率低下&#xff0c;已难以满足现代业务快速迭代…...

论文AI率太高怎么救?答辩前1周降AI率完整攻略+不延期方案!

论文AI率太高怎么救&#xff1f;答辩前1周降AI率完整攻略不延期方案&#xff01; 导师周一通知答辩、周五查出来知网 AIGC 检测 67%——这种倒计时场景每年 3-5 月毕业季都会上演几千次。 这种场景下选工具&#xff0c;最关键的不是「单价便宜」是「降不下来怎么办」。1 周时间…...

TlbbGmTool:从数据库小白到《天龙八部》单机版管理大师的蜕变之旅

TlbbGmTool&#xff1a;从数据库小白到《天龙八部》单机版管理大师的蜕变之旅 【免费下载链接】TlbbGmTool 某网络游戏的单机版本GM工具 项目地址: https://gitcode.com/gh_mirrors/tl/TlbbGmTool 你是否曾经面对《天龙八部》单机版数据库的复杂结构感到无从下手&#x…...