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个零门槛的字幕提取工具
暑假正是弯道超车的好机会!相信不少朋友都会选择宅在家自学网课。 不可否认的是,海量学习资源的确可以让学习变得更加便捷与自由。然而,如何高效地吸收和理解在线课程也就成为了一个关键问题。不敢想倘若此时能够拥有一款高效又实用的视频提…...
PostgreSQL 里怎样解决多租户数据隔离的性能问题?
文章目录 一、多租户数据隔离的性能问题分析(一)大规模数据存储和查询(二)并发访问和锁争用(三)索引维护成本高(四)资源分配不均 二、解决方案(一)数据分区&a…...
Oracle执行一条SQL的内部过程
一、SQL语句根据其功能主要可以分为以下几大类: 1. 数据查询语言(DQL, Data Query Language) 功能:用于从数据库中检索数据,常用于查询表中的记录。基本结构:主要由SELECT子句、FROM子句、WHERE子句等组成…...
SpringMVC的架构有什么优势?——控制器(一)
#SpringMVC的架构有什么优势?——控制器(一) 前言 关键字: 机器学习 人工智能 AI chatGPT 学习 实现 使用 搭建 深度 python 事件 远程 docker mysql安全 技术 部署 技术 自动化 代码 文章目录 控制器(Controller) 控制器是S…...
LabVIEW干涉仪测向系统
开发了一套基于LabVIEW的软件系统,结合硬件设备,构建一个干涉仪测向实验教学平台。该平台应用于信号处理课程,帮助学生将理论知识与实际应用相结合,深化对信号处理核心概念的理解和应用。 项目背景: 当前信号处理教学…...
JavaScript 模拟光标全选选中一段文字
在JavaScript中,如果你想要通过编程方式选择一段文本,你可以使用window.getSelection()和Range对象。以下是一个简单的例子,展示了如何使用这些对象来选中页面上的特定文本节点: function selectText(node) {if (window.getSelect…...
【算法】代码随想录之数组(更新中)
文章目录 前言 一、二分查找法(LeetCode--704) 二、移除元素(LeetCode--27) 前言 跟随代码随想录,学习数组相关的算法题目,记录学习过程中的tips。 一、二分查找法(LeetCode--704࿰…...
Win-ARM联盟的端侧AI技术分析
Win-ARM联盟,端侧AI大幕将起 微软震撼发布全球首款AI定制Windows PC——Copilot PC,搭载全新NPU与重塑的Windows 11系统,纳德拉盛赞其为史上最快、最强、最智能的Windows PC。该设备算力需求高达40TOPS,支持语音翻译、实时绘画、文…...
MySQL常见的几种索引类型及对应的应用场景
MySQL 提供了多种索引类型,每种索引类型都有其特定的应用场景和优势。以下是 MySQL 中常见的几种索引类型及其具体应用场景: 1. B-Tree 索引 特点: B-Tree(Balanced Tree,平衡树)是 MySQL 的默认索引类型…...
如何利用java依赖jave-all-deps实现视频格式转换
视频格式转换是常见的需求,通过使用Java依赖库jave-all-deps可以实现视频格式的转换。本文将详细介绍在Java中如何利用jave-all-deps实现视频格式转换。 什么是jave-all-deps库? jave-all-deps是一款基于FFmpeg库的Java音视频编解码库。它提供了一系列AP…...
三端保险丝-锂电池BMS二次保护器件
三端保险丝,从其结构上来看,是一种芯片式表贴安装产品,通常包含三个端子。其中,两个端子由合金金属构成的保险丝串联而成,当电路中出现过流或短路故障时,保险丝能够迅速熔断,切断电路࿰…...
企业网站搭建步骤/网络营销软件大全
我的Dock用的是plank,很简单很好用。为什么不用Docky还有其他什么玩意儿呢?plank很简单很好用,资源占用很少,可以智能隐藏,you nearly cant feel it but you know its right there, supporting your work correctly.大…...
wordpress生成静态html页面/青岛seo杭州厂商
台湾都有哪些国家公园?共八个,详情如下:南区:垦丁国家公园;1984年01月01日成立;屏东县恒春镇。中区:玉山国家公园;1985年04月10日成立;南投,高雄,…...
wordpress主题外贸下载/网店运营推广
Apollo配置中心 Apollo配置中心Apollo配置中心1.什么是配置中心2.配置举例3.说说Apollo3.1背景3.2 介绍3.3基础模型3.4 核心概念3.4.1 NameSpace3.4.1.1 Namespace格式3.4.1.2 Namespace权限3.4.1.3 Namespace 类型3.4.2 核心模块3.4.2.1 ConfigService3.4.2.2 AdminService3.4…...
投资理财产品的网站建设/2021年网络营销考试题及答案
引言 在日常开发工作中,多线程开发可以说是必备技能,好的程序员是一定要对线程这块有深入了解的,我是Java程序员,并且Java语言本身对于线程开发的支持是非常成熟的,所以今天我们就来入个门,学一下Java怎么创…...
软件开发项目经验/南昌seo管理
安装环境/工具1.Linux( centOS 版)2.mysql-5.6.31-linux-glibc2.5-x86_64.tar安装步骤1.下载mysql解压版(mysql-5.6.31-linux-glibc2.5-x86_64.tar),下载地址http://dev.mysql.com/downloads/mysql/;2.解压mysql安装文件命令:tar -zxvf mysql…...
网上做问卷报酬不错的网站是/网络广告人社区
最近做了一个webservice应用,发现传输过程中,只要有特殊这符,就会导致出错 于是上网搜了一些方法,先把源WebService输出的内容进行特殊字符转换十六进制,接到收后再进行返转换 ///<summary>///StringExtenstion 的摘要说明///</summary>public static class String…...