2024-06-08 Unity 编辑器开发之编辑器拓展9 —— EditorUtility
文章目录
- 1 准备工作
- 2 提示窗口
- 2.1 双键窗口
- 2.2 三键窗口
- 2.3 进度条窗口
- 3 文件面板
- 3.1 存储文件
- 3.2 选择文件夹
- 3.3 打开文件
- 3.4 打开文件夹
- 4 其他内容
- 4.1 压缩纹理
- 4.2 查找对象依赖项
1 准备工作
创建脚本 “Lesson38Window.cs” 脚本,并将其放在 Editor 文件夹下。
using UnityEditor;
using UnityEngine;public class Lesson38Window : EditorWindow
{[MenuItem("Unity 编辑器拓展/Lesson38/EditorUtility 知识讲解")]public static void Open() {Lesson38Window win = GetWindow<Lesson38Window>();win.Show();}private void OnGUI() { }
}
2 提示窗口
2.1 双键窗口
该方法显示窗口时会阻塞逻辑。
// titile: 窗口标题名称。
// message:窗口显示信息。
// ok: 按钮 1 名称。
// cancel: 按钮 2 名称。
public static bool DisplayDialog(string title, string message, string ok);
public static bool DisplayDialog(string title, string message, string ok, [UnityEngine.Internal.DefaultValue("\"\"")] string cancel);
示例:
private void OnGUI() {if (GUILayout.Button("显示提示窗口")) {if (EditorUtility.DisplayDialog("测试窗口", "确定要继续吗?", "确定", "取消")) {Debug.Log("点击了确定");}else {Debug.Log("点击了取消");}Debug.Log("窗口显示完毕");}
}
2.2 三键窗口
该方法显示窗口时也会阻塞逻辑。
public static int DisplayDialogComplex(string title, // 窗口标题名称string message, // 窗口显示信息string ok, // 按钮 1 名称string cancel, // 按钮 2 名称string alt); // 按钮 3 名称
返回值需要注意,不是顺序返回:
- 0:按钮 1 按下。
- 1:按钮 3 按下。
- 2:按钮 2 按下。
示例:
private void OnGUI() {...if (GUILayout.Button("显示三键提示窗口")) {var result = EditorUtility.DisplayDialogComplex("三键显示", "显示信息", "选项1", "关闭", "选项2");switch (result) {case 0:Debug.Log("点击了选项1");break;case 1:Debug.Log("点击了关闭");break;case 2:Debug.Log("点击了选项2");break;}}
}
2.3 进度条窗口
进度条窗口不会卡逻辑,但是需要配合关闭进度条使用。
// 显示不可取消的进度条
// titile: 窗口标题名称。
// info: 窗口显示信息。
// progress:当前进度,0~1。
public static extern void DisplayProgressBar(string title, string info, float progress);
// 显示可取消的进度条
// 返回值:用户是否按下了取消按钮
public static extern bool DisplayCancelableProgressBar(string title, string info, float progress);// 关闭进度条
public static extern void ClearProgressBar();
示例:
public class Lesson38Window : EditorWindow
{private float _progressValue = 0;...private void OnGUI() {...if (GUILayout.Button("显示更新进度条")) {_progressValue += 0.1f;EditorUtility.DisplayProgressBar("进度条标题", "进度条窗口显示内容", _progressValue);Debug.Log("进度条窗口显示完毕");}if (GUILayout.Button("关闭进度条")) {_progressValue = 0;EditorUtility.ClearProgressBar();}}
}
3 文件面板
3.1 存储文件
通常用于在编辑器中保存新创建的文件或选择文件的保存路径。
// 返回值:用户选择保存的文件路径
public static extern string SaveFilePanel(string title, // 窗口标题string directory, // 打开的目录路径string defaultName, // 默认保存的文件名称string extension); // 文件后缀名// 只允许用户选择项目内的文件夹作为保存路径
public static string SaveFilePanelInProject(string title, // 窗口标题string defaultName, // 默认保存的文件名称string extension, // 文件后缀名string message); // 在对话框窗口中显示的文本摘要,Windows 下不显示
示例:
private void OnGUI() {...if (GUILayout.Button("打开文件存储面板")) {var str = EditorUtility.SaveFilePanel("打开我的文件", Application.dataPath, "test", "txt"); // 获取用户选择的保存路径if (str != "") // 如果用户取消选择,则 str 为空字符串,需要进行判断File.WriteAllText(str, "Hello World"); // 手动操作,写入文件内容}
}
3.2 选择文件夹
通常用于在编辑器中选择文件夹作为保存路径,用于保存文件或执行其他与文件夹相关的操作。
// title: 窗口标题
// folder: 默认打开的文件夹
// defaultName:默认名称
public static extern string SaveFolderPanel(string title, string folder, string defaultName);
示例:
private void OnGUI() {...if (GUILayout.Button("显示文件夹存储面板")) {var str = EditorUtility.SaveFolderPanel("得到一个存储路径(文件夹)", "", "test");Debug.Log(str);}
}
3.3 打开文件
通常用于在编辑器中选择文件进行打开或执行其他与文件相关的操作。
// title: 窗口标题
// directory:默认打开的文件夹
// extension:文件后缀名
public static extern string OpenFilePanel(string title, string directory, string extension);
示例:
private void OnGUI() {...if (GUILayout.Button("显示打开文件面板")) {var str = EditorUtility.OpenFilePanel("得到一个文件路径", Application.dataPath, "txt");if (str != "") {Debug.Log(File.ReadAllText(str));}}
}
3.4 打开文件夹
通常用于在编辑器中选择文件夹进行打开或执行其他与文件夹相关的操作。
// title: 窗口标题
// folder: 默认打开的文件夹
// defaultName:默认名称
public static extern string OpenFolderPanel(string title, string folder, string defaultName);
和 SaveFolderPanel 功能类似,都是获取一个文件夹路径。
4 其他内容
4.1 压缩纹理
public static void CompressTexture(Texture2D texture,TextureFormat format,TextureCompressionQuality quality);
将纹理显式压缩为指定的格式,之后会配合资源导入相关内容使用。
4.2 查找对象依赖项
返回对象所依赖的所有资源列表。
public static extern UnityEngine.Object[] CollectDependencies([Unmarshalled] UnityEngine.Object[] roots);
示例:
using System.IO;
using UnityEditor;
using UnityEngine;
using Object = UnityEngine.Object;public class Lesson38Window : EditorWindow
{public GameObject obj;...private void OnGUI() {...obj = EditorGUILayout.ObjectField("关联对象", obj, typeof(GameObject), true) as GameObject;if (GUILayout.Button("检索关联对象")) {var objs = EditorUtility.CollectDependencies(new Object[] { obj });Selection.objects = objs;}}
}
更多内容:https://docs.unity3d.com/ScriptReference/EditorUtility.html
相关文章:
2024-06-08 Unity 编辑器开发之编辑器拓展9 —— EditorUtility
文章目录 1 准备工作2 提示窗口2.1 双键窗口2.2 三键窗口2.3 进度条窗口 3 文件面板3.1 存储文件3.2 选择文件夹3.3 打开文件3.4 打开文件夹 4 其他内容4.1 压缩纹理4.2 查找对象依赖项 1 准备工作 创建脚本 “Lesson38Window.cs” 脚本,并将其放在 Editor 文件…...
Mac下删除系统自带输入法ABC,正解!
一、背景说明 MacOS 在 14.2 以下的系统存在中文输入法 BUG,会造成系统卡顿,出现彩虹圆圈。如果为了解决这个问题,有两种方法: 升级到最新的 14.5 系统使用第三方输入法 在使用第三方输入法的时候,会发现系统自带的 …...
redis学习路线
待更新… 一、nosql讲解 1. 为什么要用nosql? 用户的个人信息,社交网络,地理位置,自己产生的数据,日志等等爆发式增长!传统的关系型数据库已无法满足这些数据处理的要求,这时我们就需要使用N…...
数据库练习题
1行程和用户 表:Trips ----------------------- | Column Name | Type | ----------------------- | id | int | | client_id | int | | driver_id | int | | city_id | int | | status | enum | | request_at…...
【每日一函数】uname 函数介绍及代码演示
Linux uname 函数介绍及代码演示 引言 Linux 系统中,uname 是一个常用的命令行工具,用于显示系统信息。然而,在编程过程中,我们有时需要在程序中获取这些信息,此时就可以使用 uname 函数。本文将对 uname 函数进行详…...
linux:命令别名,文件描述符及重定向
命令别名 命令别名是Shell提供的一种快捷方式,允许为命令创建简短的替代名称。,可以通过输入较短的别名来执行较长的命令,从而提高效率。 1.查看所有别名: [rootlocalhost ~]# alias 2.创建临时别名,当前会话关闭即清除 alias 别名完整命令…...
前端开发之中svg图标的使用和实例
svg图标的使用和实例 前言效果图1、安装插件2、vue3中使用2.1、 在components文件夹中,创建公共类SvgIcon/index.vue2.2、创建icons文件,存放svg图标和将所有的svg图标进行引用并注册成全局组件2.3、在man.js 中注册2.4、在vue.config.js中配置svg2.5、在vue中的调用svg图标3…...
BeagleBone Black入门总结
文章目录 参考连接重要路径系统镜像下载访问 BeagleBone 参考连接 镜像下载启动系统制作:SD卡烧录工具入门书籍推荐:BeagleBone cookbookBeagleBone概况? 重要路径 官方例程及脚本路径:/var/lib/cloud9 系统镜像下载 疑问&am…...
笔记:Mysql的安全策略
1,安装安全插件 1.检查是否已安装该插件 SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME validate_password;2.安装插件 INSTALL PLUGIN validate_password SONAME validate_password.so;3.修改配置文件 vi /etc/my.cn…...
AI绘画中的图像格式技术
在数字艺术的广阔天地里,AI绘画作为一种新兴的艺术形式,正在逐渐占据一席之地。不同于传统绘画,AI绘画依赖于复杂的算法和机器学习模型来生成图像,而这一切的背后,图像格式技术发挥着至关重要的作用。图像格式不仅关系…...
前端如何封装自己的npm包并且发布到npm注册源
前言 在前端开发中,复用代码是一种常见且高效的实践。通过封装和发布自己的npm包,你可以轻松地在多个项目之间共享代码,并且贡献给社区。以下是一步一步指导你如何封装自己的npm包并发布到npm注册源。 步骤一:创建并设置项目 首…...
vue油色谱画 大卫三角形|大卫五边形|PD图
大卫三角形 大卫五边形 PD图...
【React】前端插件 uuidjs 的使用 --随机生成id
文档1 文档2 使用 1.安装 npm install uuid2.Create a UUID import { v4 as uuidv4 } from uuid; uuidv4(); // ⇨ 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d3.或使用 CommonJS语法 const { v4: uuidv4 } require(uuid); uuidv4(); // ⇨ 1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4…...
ctfshow-web入门-信息搜集(web11-web20)
目录 1、web11 2、web12 3、web13 4、web14 5、web15 6、web16 7、web17 8、web18 9、web19 10、web20 1、web11 域名其实也可以隐藏信息,比如flag.ctfshow.com 就隐藏了一条信息 查询域名的 DNS 记录,类型为 TXT(域名的说明&#…...
C语言详解(动态内存管理)2
Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…...
【ubuntu软件版本管理】利用update-alternatives管理ubuntu软件
我们有的时候希望在安装了新软件之后保留旧版本的软件,比如希望保留旧版本的gcc,以防以前写的C编译出问题,这时候就需要版本管理软件update-alternatives。 在此之前我们需要先弄清楚,什么是ubuntu的软件?拿C源…...
如何把linux安装到单片机中
1.如何把linux安装到单片机中 将Linux安装到单片机中通常不是一个直接的过程,因为单片机(如51系列、STC系列等)的硬件资源和处理能力有限,而Linux是一个为更强大硬件平台(如个人电脑、服务器)设计的操作系…...
Ubuntu bash按Table不联想
Ubuntu bash按Table不联想 bash-completion包未安装或损坏: 自动补全功能依赖于bash-completion包。首先,需要确保这个包已经安装。可以通过下面的命令安装或重新安装它: sudo apt install --reinstall bash-completion安装完成后,…...
Xcode中给UIView在xib中添加可视化的属性
给UIView在xib中添加可视化的属性 效果如下图: 可以直接设置view 的 borderColor 、borderWidth、cornerRadius,也可以单独指定view的某个角是圆角。减少了代码中的属性。 完整代码: UIViewBorder.h #import <UIKit/UIKit.h>inter…...
中缀表达式和前缀后缀
在中缀表达式中,操作数可能与两个操作符相结合 但是,想要不带括号无歧义,且不需要考虑运算符优先级和结合性 所以考虑 前缀表达式,波兰表达式 后缀表达式 逆波兰表达式 对于人来说,中缀表达式是最容易读懂的。但是对于…...
强化学习面试题
强化学习面试题通常会涵盖该领域的多个方面,包括基本概念、算法、应用以及实践问题。以下是一些常见的强化学习面试题及其简要回答: 基本概念题: 什么是强化学习? 强化学习是一种通过智能体与环境交互来学习最优行为策略的机器学习范式。智能体根据当前状态选择动作,环境…...
Pytorch中的广播机制
一、广播(broadcast)机制概述 在PyTorch中,广播机制(Broadcast)允许对不同形状的张量执行逐元素操作,而无需显式地复制数据。这一机制使得编写代码更加简洁和高效。广播机制遵循一定的规则来扩展较小的张量,使其与较大的张量具有相同的形状 …...
2024年全国一高考数学压轴题
(3) 证明: 显然, 等差数列 { a 1 , . . . , a 4 n 2 } \{a_{1},...,a_{4n2}\} {a1,...,a4n2} 是 ( i , j ) (i, j) (i,j)-可分的等价于等差数列 { 1 , . . . , 4 n 2 } \{1,...,4n2\} {1,...,4n2} 是 ( i , j ) (i,j) (i,j)-可分的. 前推后显然, 我们考虑后推前, 在去…...
springboot+vue前后端项目接口校验通信数据完整性
方案:使用国密SM3算法实现数字签名 服务端 maven的pom文件引用 <!-- 国密算法支持 --><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15to18</artifactId><version>1.69</version><…...
进程通信(IPC-Inter Process Communication)
进程之间的通信通过内核空间实现 IPC技术 ①管道(匿名管道/命名管道-FIFO队列) ②System V IPC(消息队列、信号量和共享内存) ③套接字(UNIX套接字&Internet套接字) ※信号 软中断,信号提供了一种处理异步事件的方法,作为进程通信的一种机制&am…...
idea debug时提示”Method breakpoints may dramatically slow down debugging“的解决办法
问题现象 今天同事喊我过去看一个问题,项目正常启动的时候没问题,debug模式就卡住了,很久不动。我推测是哪个断点导致的,一看断点果然有情况。在方法上打了断点。 解决方式(Android Studio一样的解决) 1、View Brea…...
计算机缺失msvcp100.dll如何解决?教你5种简单高效的修复方法
在现代科技发展的时代,计算机已经成为我们生活和工作中不可或缺的工具。然而,在使用计算机的过程中,我们常常会遇到各种问题和困扰。其中之一就是计算机找不到msvcp100.dll文件。这个问题可能会给我们的生活和工作带来很多不便,下…...
对硬盘的设想2:纸存,硬指针,软指针
“纸存”是设想中的存储器,它只能改写两次:写一次,再改一次,然后就不能再动了。就像拿着钢笔在纸上写字一样,所以叫纸存。 硬指针P、软指针S S abcd S aPcdPx P aPcdPx S aycd ①一个软指针S,指向数据abcd…...
Python在股票交易分析中的应用:布林带与K线图的实战回测
引言 在股票交易的世界中,技术分析是投资者们用来预测市场动向的重要工具。布林带(Bollinger Bands)作为一种动态波动范围指标,因其直观性和实用性而广受欢迎。本文将通过Python代码,展示如何使用布林带结合K线图来分…...
现代密码学-认证、消息认证码
什么是单向散列函数 单向散列函数(one way hash function):一个输入:消息(message),一个固定长度的输出(散列值,hash value),根据散列值检查消息完整性(integrity) 单向散列函数也称为消息摘要…...
wordpress文章关闭缩略图/seo搜索引擎优化的内容
变量和简单数据类型 1.用引号括起来的都是字符串,可以是单引号也可以是双引号。 2.主要是变量不能使用空格,大小写有区别,尽量使用小写字母,少使用l和o。 3.对于删除空白格,可以使用lstrip()\rstrip()\strip(),要是…...
怎样做微网站/网络营销推广的总结
https://blog.csdn.net/u010312949/category_7640395.html 参考 1:啥是串口 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interfac…...
xml网站地图格式/seo搜索引擎入门教程
题目描述 Description有一个NM的单位方格中,其中有些方格是水塘,其他方格是陆地。如果要用12的矩阵区覆盖(覆盖过程不容许有任何部分重叠)这个陆地,那么最多可以覆盖多少陆地面积。 输入描述 Input Description输入文件…...
网站建设论文框架/新闻软文发稿平台
我们知道定义一个委托之后,就可以像MyDelegate(3,7)这样回调方法,其实每一个委托对象都是一个类对象,每一个委托对象中都有一个Invoke的同步成员方法(查MSDN得知),系统实…...
代做视频的网站/友情链接适用网站
概述 看Spring源码的目的 Spring的两大基本特性 bean对象的获取流程 IOC容器概述 Spring 事件 Spring中的重点接口...
python可以做网站开发吗/淘宝大数据查询平台
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。matlab坐标轴范围的设置方法是:1、打开matlab,输入“x0:0.1:100;ysin(x)100;plot(x,y)”画出一个正弦函数图像。2、可以看…...