UI Toolkit generateVisualContent的使用
方法描述:
Called when the VisualElement visual contents need to be (re)generated.
When this delegate is handled, you can generate custom geometry in the content region of the VisualElement. For an example, see the MeshGenerationContext documentation.
This delegate is called only when the VisualElement needs to regenerate its visual contents. It is not called every frame when the panel refreshes. The generated content is cached, and remains intact until any of the VisualElement's properties that affects visuals either changes, or VisualElement.MarkDirtyRepaint is called.
When you execute code in a handler to this delegate, do not make changes to any property of the VisualElement. A handler should treat the VisualElement as 'read-only'. Changing the VisualElement during this event might cause undesirable side effects. For example, the changes might lag, or be missed completely.
上面将Unity中 UI Toolkit中的VisualElement相关文档抄录在这儿,总结出来就是在我们需要自定义一些UI图形时可以重写这个委托方法,生成我们想要的几何图形。有几点需要注意:
- 这个方法不是每帧都调用,生成的内容会被缓存起来
- 如果想重绘,可以调用VisualElement.MarkDirtyRepaint这个方法,重绘将在下一帧进行
- 不要在重写的委托方法里去改变VisualElement的属性
那么,如何通过这个方法去生成我们想要的UI图形,这个委托本身是不会做这件事的,它是通过MeshGenerationContext 这个方法来帮我生成,这个类的对象可以通过generateVisualContent 回调用的传入参数中拿到。
在Unity的文档中关于这个类的使用有一个示例,抄录如下:
class TexturedElement : VisualElement{static readonly Vertex[] k_Vertices = new Vertex[4];static readonly ushort[] k_Indices = { 0, 1, 2, 2, 3, 0 };static TexturedElement(){k_Vertices[0].tint = Color.white;k_Vertices[1].tint = Color.white;k_Vertices[2].tint = Color.white;k_Vertices[3].tint = Color.white;}public TexturedElement(){generateVisualContent += OnGenerateVisualContent;m_Texture = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/tex.png");}Texture2D m_Texture;void OnGenerateVisualContent(MeshGenerationContext mgc){Rect r = contentRect;if (r.width < 0.01f || r.height < 0.01f)return; // Skip rendering when too small.float left = 0;float right = r.width;float top = 0;float bottom = r.height;k_Vertices[0].position = new Vector3(left, bottom, Vertex.nearZ);k_Vertices[1].position = new Vector3(left, top, Vertex.nearZ);k_Vertices[2].position = new Vector3(right, top, Vertex.nearZ);k_Vertices[3].position = new Vector3(right, bottom, Vertex.nearZ);MeshWriteData mwd = mgc.Allocate(k_Vertices.Length, k_Indices.Length, m_Texture);// Since the texture may be stored in an atlas, the UV coordinates need to be// adjusted. Simply rescale them in the provided uvRegion.Rect uvRegion = mwd.uvRegion;k_Vertices[0].uv = new Vector2(0, 0) * uvRegion.size + uvRegion.min;k_Vertices[1].uv = new Vector2(0, 1) * uvRegion.size + uvRegion.min;k_Vertices[2].uv = new Vector2(1, 1) * uvRegion.size + uvRegion.min;k_Vertices[3].uv = new Vector2(1, 0) * uvRegion.size + uvRegion.min;mwd.SetAllVertices(k_Vertices);mwd.SetAllIndices(k_Indices);}}
上面的示例展示了如何将一张纹理绘制到UI上。这个过程和OpenGL绘制Texture比较像,可以看到Allocate这个方法接收顶点数据和索引数据,最后一个纹理对象是一个可选参数,如果不传,则绘制出来的是Vertex.tint赋值的颜色。
这里要注意 Vertex 类的 position 属性,它是以左上角为坐标原点,向右是x轴的正方向,向下是y轴的正方向。给定的顶点和索引的顺序要匹配,按顺时针的方向进行三角形的绘制。
假如有一个长宽都为200的VisualElement,我们给定三个点(0, 0), (200, 0), (0, 200)绘制一个三角形, 则它的索引顺序为0, 1, 2
相关文章:

UI Toolkit generateVisualContent的使用
方法描述: Called when the VisualElement visual contents need to be (re)generated. When this delegate is handled, you can generate custom geometry in the content region of the VisualElement. For an example, see the MeshGenerationContext documentation. This…...

第十六章 ValidationPipe验证post请求参数
在此之前我们用到的请求都是get请求,接下来我们使用post 请求 并接收参数,通过 Body 装饰器来取注意:post请求带参数 我们通过游览器路径是直接请求不了的 需要使用postman 来发 post 请求postman 下载网站 https://www.postman.com/download…...

HippoRAG如何从大脑获取线索以改进LLM检索
知识存储和检索正在成为大型语言模型(LLM)应用的重要组成部分。虽然检索增强生成(RAG)在该领域取得了巨大进步,但一些局限性仍然没有克服。 俄亥俄州立大学和斯坦福大学的研究团队推出了HippoRAG,这是一种创新性的检索框架,其设计理念源于人类…...
求函数最小值-torch版
目标:torch实现下面链接中的梯度下降法 先计算 的导函数 ,然后计算导函数 在处的梯度 (导数) 让 沿着 梯度的负方向移动, 自变量 的更新过程如下 torch代码实现如下 import torchx torch.tensor([7.5],requires_gradTrue) # print(x.gr…...

如何将HEVC格式的视频转换为无损、未压缩的MP4格式视频?
在和大家分享视频格式转换之前,先跟大家分享一下HEVC格式的视频到底是什么文件?压缩原理是什么?了解了它的本质之后,我们就可以知道如何保证视频高清无损了。 如何将HEVC格式的视频转换为无损、未压缩的MP4格式视频? …...

自定义在线活动报名表单小程序源码系统 源代码+搭建部署教程 可二次定制开发
系统概述 在数字化时代,线上活动成为连接用户与组织的重要桥梁。为了高效地管理活动报名流程,一款灵活、易用的在线活动报名表单小程序显得尤为重要。本文旨在为开发者提供一套全面的解决方案,包括自定义在线活动报名表单小程序的源代码分析…...

数据分析入门指南:表结构数据(三)
在数字化转型的浪潮中,表结构数据作为企业决策支持系统的核心要素,其重要性日益凸显。本文深入剖析了表结构数据的本质特征、高效处理策略,并探讨了其在现代商业智能环境中的广泛应用,旨在为数据分析师与决策者提供前沿洞察与实战…...

凌凯科技前五大客户依赖症加剧:研发费用率骤降,应收账款大增
《港湾商业观察》黄懿 6月13日,上海凌凯科技股份有限公司(下称“凌凯科技”)在港交所提交上市申请,拟于主板上市,华泰国际为其独家保荐人。 凌凯科技致力于提供小分子化合物技术和产品解决方案,专注于制药…...

5 科大讯飞AI大赛:热力学定律的电池材料生产参数动态调控
赛题名称:基于热力学定律的电池材料生产参数动态调控挑战赛 赛题类型:数据挖掘 赛题任务:利用时空模型进行建模并预测匣钵实际温度 赛题链接:https://challenge.xfyun.cn/topic/info?typebattery-material&optiontjjg&…...

概论(二)随机变量
1.名词解释 1.1 样本空间 一次具体实验中所有可能出现的结果,构成一个样本空间。 1.2 随机变量 把结果抽象成数值,结果和数值的对应关系就形成了随机变量X。例如把抛一次硬币的结果,正面记为1,反面记为0。有变量相对应的就有自…...

Apache AGE 安装部署
AGE概述 概述 我们可以通过源码安装、拉取docker镜像运行、直接使用公有云三种方式中的任意一种来使用Apache AGE 获取 AGE 发布版本 可以在 https://github.com/apache/age/releases 找到发布版本和发布说明。 源代码 源代码可以在 https://github.com/apache/age 找到…...

Python29 Tensorflow的基本知识和使用
1. TensorFlow TensorFlow 是一个开源的机器学习框架,由 Google Brain 团队开发。它用于数据流图的计算,尤其擅长深度学习任务。在 TensorFlow 中,数据流图(Data Flow Graph)是其核心概念之一,它定义了计算…...

Linux操作系统上用到的磁盘分区管理工具
parted磁盘分区工具 磁盘格式:MBR, GPT, 这两种名称分别是硬盘里面分区表两种格式的称呼, 第一种MBR格式的分区表最大支持2TB的容量, 磁盘的三种分区主分区,扩展分区,逻辑分区,主分区扩展分区<4 第…...

Python数据结构的库之Fuk使用详解
概要 fuk 是一个用于处理 Python 数据结构的库,全称为 "Fast and Uncomplicated Kit"。它提供了一系列高效、简洁的数据结构实现,以及对 Python 内置数据结构的扩展。通过使用 fuk,开发者可以更加方便地处理列表、集合、字典等数据类型,提高代码的执行效率和可读…...

【STM32学习】cubemx配置,串口的使用,串口发送接收函数使用,以及串口重定义、使用printf发送
1、串口的基本配置 选择USART1,选择异步通信,设置波特率 选择后,会在右边点亮串口 串口引脚是用来与其他设备通信的,如在程序中打印发送信息,电脑上打开串口助手,就会收到信息。 串口的发送接收࿰…...

复现MiDAS文章:文章数据和代码
介绍 MiDAS 4: A global catalogue of full-length 16S rRNA gene sequences and taxonomy for studies of bacterial communities in wastewater treatment plants 提供了全套的代码和数据,方便大家复现: github: https://github.com/ msdueholm/MiD…...

【Python专栏】Python的历史及背景介绍
博客主页:Duck Bro 博客主页系列专栏:Python专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Python的背景介绍 关键词:Python、优缺点、领域 目录 …...

web端已有项目集成含UI腾讯IM
通过 npm 方式下载 TUIKit 组件,将 TUIKit 组件复制到自己工程的 src 目录下: npm i tencentcloud/chat-uikit-vue mkdir -p ./src/TUIKit && rsync -av --exclude{node_modules,package.json,excluded-list.txt} ./node_modules/tencentcloud/…...

IF不降反增!审稿速度,比我家网速还快!3本接受率高的医学期刊,赶紧码住!
🔍 为什么选择这3本期刊? 今天老毕给大家分享3本医学 SCI,分别为Tumori Journal、Adipocyte以及Annals of Medicine。 这3本医学杂志,不仅审稿速度快,录用率还高,其中不乏接受率为48%的“毕业神刊”。2024年…...

怎样把视频字幕提取出来?分享4个零门槛的字幕提取工具
暑假正是弯道超车的好机会!相信不少朋友都会选择宅在家自学网课。 不可否认的是,海量学习资源的确可以让学习变得更加便捷与自由。然而,如何高效地吸收和理解在线课程也就成为了一个关键问题。不敢想倘若此时能够拥有一款高效又实用的视频提…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...