【Unity】Inspector排版扩展学习初探

一、简单的Unity Inspector扩展

[SerializeField]

[SerializeField] 作用:让private属性也可以显示在面板上

[Range(x , y)]

[Range(x , y)] 作用: 让参数从输入框变为范围滑条

[Header(" 标题 ")]

[Header(" 标题 ")]作用:在属性前面加上标题

[Tooltip(" 解释")]

[Tooltip(" 解释")]作用: 在鼠标停留在属性名上时显示解释

[TextArea(a ,b)]

[TextArea(a ,b)]作用: 让文本输入框可以输入不止1行,为最小a行,最大b行

[Space(N)]

[Space(N)]作用:控制两个属性在Inspector面板上显示的间隔大小N

[HideInInspector]

[HideInInspector] 作用: 让public属性不会显示在面板上

以上可以满足基本需求,但更复杂的排版需要代码实现,需要扩展Editor类。

二、使用IMGUI框架扩展

1.添加参数

扩展的Editor类必须放在Editor文件夹

然后在脚本中使用UnityEditor,并且继承Editor类,同时在初始需要写[CustomEditor(typeof(Class))],来指明是为哪个脚本添加的扩展 

 

在IMGUI框架下,我们需要覆盖OnInspectorGUI()来实现扩展。

 如图所示,在覆盖时会自动调用父类的方法OnInspectorGUI,如果去掉该方法则原脚本则不会有任何属性显示。

我们先定义一个2D纹理,然后调用ObjectField函数,输入名称,值等信息。 该函数返回值是一个Object所以在前面加上强制转换。然后就可以看到原脚本的面板上有了新的属性。

2.添加按钮&调整样式

我们还可以添加按钮: 

GUILayout.Button用来添加按钮,如果按钮被点击,则该方法会返回一个True。如下图所示。

IMGUI框架也可以调整样式,如下图,为按钮添加高度参数,可以让按钮变大。 

 

三、使用UI Elements扩展

使用UI Elements框架需要添加相应的命名空间。 

同样的覆盖父类的方法,如上图。此时返回Unity窗口,我们发现我们原本脚本的之前用IMGUI框架添加的属性全部消失了。原因是当CreateInspectorGUI的返回值不为空的时候,它的优先级是最高的,所以无视了之前IMGUI框架下的方法。 

其中VisualElement是该框架下最基本的显示对象,可以添加最基本的任何其它子显示对象。

1.添加参数 

以上三行代码显示了如何像IMGUI框架一样为原脚本添加一个纹理的参数。

2.添加按钮&调整样式 

 接着我们添加一个按钮,如下图代码所示,我们可以为按钮设置相应的调用方法。

 可以看到,按下按钮后,打印出了相应的字符串。

我们同样可以用Button.style.height来更改样式高度,如下图所示。 

3.注册回调

我们还可以检测属性注册来执行回调自定方法,如下图所示。

 可以看到,当我们指定了一张纹理后,回调函数被调用,打印出了字符串。

 

如果我们想对更改后的纹理或其他属性做一些操作,如打印新纹理的名字,那么要在回调函数中执行如上图所示。

4.调用原脚本方法

那么如果我们想在扩展脚本里调用原脚本的函数该怎么办呢?比如按下按钮,调用原脚本的函数。我们先在原脚本中写一个函数,打印一个字符串。

 然后在扩展Editor的脚本里更改按下按钮的方法,这里把原来的打印注释掉。

 Unity提供了target指向原来的脚本。当然我们需要把它强制转换成原脚本的类。然后调用即可。如上图所示。

按下按钮,可以看到,打印成功了。 

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

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

相关文章

如何选择合适的 AWS 区域对网站性能和成本?

选择合适的 AWS 区域对网站性能和成本都有很大影响,我们结合九河云的分析来总结一些主要考虑因素: 1. 地理位置和用户分布 最好选择靠近目标用户的区域,可以减少网络延迟,提高响应速度。如果用户分散在世界各地,可以考虑使用 AWS 的全球加速器或内容分发网络(CDN)服务。 2. …

docker 容器 network host 模式启动

docker 默认启动容器 network 是 bridge 模式,需使用 -p 映射端口实现容器与宿主机网络通信,较安全; 当使用 network host 模式,直接走宿主机网络通信,较不安全。 下面来一个 docker 容器 network host 模式启动 的 实…

SpringBoot:CORS是什么?SpringBoot如何解决跨域问题?

一、简介 跨域资源共享(CORS, Cross-Origin Resource Sharing)是一个W3C规范,它定义了一种浏览器和服务器交互的方式来确定是否允许跨源请求。当一个资源(如HTML页面、JavaScript文件、图片等)从一个源(ori…

GPT-4o更容易越狱?北航南洋理工上万次测试给出详细分析

卡奥斯智能交互引擎是卡奥斯基于海尔近40年工业生产经验积累和卡奥斯7年工业互联网平台建设的最佳实践,基于大语言模型和RAG技术,集合海量工业领域生态资源方优质产品和知识服务,旨在通过智能搜索、连续交互,实时生成个性化的内容…

CentOS7下快速升级至OpenSSH9.7p2安全版本

一、CentOS7服务器上编译生成OpenSSH9.3p2的RPM包 1、编译打包的shell脚本来源于该项目 https://github.com/boypt/openssh-rpms解压zip项目包 unzip openssh-rpms-main.zip -d /opt cd /opt/openssh-rpms-main/ vim pullsrc.sh 修改第23行为source ./version.env 2、sh pull…

知识图谱存在的挑战---商业模式相关和人才相关

文章目录 商业模式相关人才相关 商业模式相关 商业模式是通过协调关系,利用资源,获得价值和利益,将这些内容连接起来,从而形成一种企业满足消费者需求的动态系统。一种商业模式包含的要素很多导致商业模式的种类也很多&#xff0c…

比较市场上14款最佳的看板工具软件

文章对比了14款看板工具软件:PingCode、Worktile、Trello、Asana、Teambition、Monday、ClickUp、Wrike、Jira、Kanban Tool、MeisterTask、Teamhood、Leankit by Planview、ZenHub。 看板工具以其直观的设计和灵活性,成为团队协作和项目跟踪的首选。通过…

Java Collections集合的工具类使用方法

import java.util.*; public class test1 {public static void main(String[] args){// Collections集合的工具类使用方法/*1.Collections.addAll(list,l1,l2,l3...) 可变参数添加对象2.Collections.shuffle(list) 打乱集合中的元素顺序3.Collection.sort(list, new Comparator…

python3的基本语法说明二

一. 简介 前一篇文章简单学习了 python3 的一些基本语法,文章如下:python3的基本语法说明一-CSDN博客 本文继续学习 python3 的基本语法。 二. python3 的基本语法 1. 多行语句 Python 通常是一行写完一条语句,但如果语句很长&#xff0…

【阅读论文】-- LiveRAC:系统管理时序数据的交互式可视化探索

LiveRAC:系统管理时序数据的交互式可视化探索 摘要引言相关工作系统管理角色和活动当前工具的局限性 迭代设计方法参加者设计阶段 设计要求可视化解决方案设计原则LiveRAC 接口执行 纵向评价非正式纵向研究方法对设计的影响使用场景 结论致谢参考文献 摘要 我们介绍…

利用免费的可视化组件,零代码制作一个电商销量大屏居然这么简单!

每到一年一度的618和双十一时,由于各种平台的优惠力度,使人们纷纷清空购物车下单,而在这庞大的销售数据下,各大商家却能够在第一时间发布整体销售业绩和数额,在这高效且巨大的数据背后,你是否有了解过展示数…

算法007:三数之和

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/3sum/ 这个题相较于前几个题来说比较难,思想是前面一个题目…

优化yarn在任务执行时核数把控不准确的问题

核数不准这个事情是个概率问题,如果你碰见了,只能说你有点非欧,本质上是因为集群配置问题,默认时yarn不会去精准把控任务的核数,因为默认的资源计算方式是用实际内存去估算核数,这就导致如果大家配置任务时…

探索新领域的四步学习策略

一、构建知识框架 广泛探索: 在探索新领域的初始阶段,我们需要像探险家一样进行全面的扫描。首先,利用网络资源,广泛搜集不同难度和视角的书籍、文章、在线课程等材料,以确保获得多元化的视角。不要局限于单一的观点或…

LSTM 词语模型上的动态量化

原文链接 (beta) Dynamic Quantization on an LSTM Word Language Model — PyTorch Tutorials 2.3.0cu121 documentation 引言 量化涉及将模型的权重和激活值从浮点数转换为整数,这样可以缩小模型大小,加快推理速度,但对准确性的影响很小…

GitHub每日最火火火项目(6.14)

以下是按照要求对每个项目的总结: 项目名称:huggingface / diffusers 项目介绍:diffusers 是一个强大的工具库,专注于图像和音频生成的扩散模型。它提供了一系列预训练模型和便捷的接口,使开发者能够轻松地探索和利用…

vue2项目更换element-ui的主题色(绝对有效,操作简单)

vue2项目更换element-ui的主题色(绝对有效,操作简单) 前言:使用vue2element-ui开发web端项目的朋友应该会有修改element-ui主题色的需求,然而 网上几年前就各种传言element-ui不再维护了,官网显示的最后一次更新日期为2023-08-24…

leetcode打卡#day42 62. 不同路径、63. 不同路径 II、343. 整数拆分、96. 不同的二叉搜索树

62. 不同路径 class Solution { public://动态规划int uniquePaths(int m, int n) {//dp数组&#xff0c;记录到达目的地的路径数vector<vector<int>> dp(m, vector(n, 0));//初始化for(int i0; i< m; i) dp[i][0] 1;for(int i0; i< n; i) dp[0][i] 1;//遍…

【智能家居控制系统项目】一、项目系统镜像烧录与系统登录

前言 完成本章节将可以获得本项目的系统UI界面功能。本章节主要介绍如何烧录项目系统镜像以及进入系统。配套的视频介绍可以点击跳转到智能家居项目复刻配套视频 1.系统功能页面介绍 完成本章全部步骤&#xff0c;我们将可使用以下项目系统功能界面。 1.1 家居总览界面 主界面…

【成品设计】基于STM32的单相瞬时值反馈逆变器

《基于STM32的单相瞬时值反馈逆变器》 整体功能&#xff1a; 图13 软件框图 如图13所示&#xff0c;由于本设计中需要通过定时器中断执行一些程序&#xff0c;故首先对中断进行初始化。中断初始化以后即为对串口进行初始化&#xff0c;总共初始化了两个串口&#xff0c;第一个…