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() { }
}
image-20240607193440480

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);

​ 示例:

image-20240607194153059
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 按下。

​ 示例:

image-20240607194803038
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();

​ 示例:

image-20240608181712643
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 下不显示

​ 示例:

image-20240608184644919
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);

​ 示例:

image-20240608191141899
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);

​ 示例:

image-20240608191540375
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);

​ 示例:

image-20240608193430329 image-20240608193508749
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

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

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

相关文章

01——生产监控平台——WPF

生产监控平台—— 一、介绍 VS2022 .net core(net6版本&#xff09; 1、文件夹&#xff1a;MVVM /静态资源&#xff08;图片、字体等&#xff09; 、用户空间、资源字典等。 2、图片资源库&#xff1a; https://www.iconfont.cn/ ; 1.资源字典Dictionary 1、…

5.数据仓库与数据挖掘期末复习

ETL的含义Extract 、 Transformation、Load。ODS的全称Operational Data Store。 DW全称 Data WarehourseDM全称是Data Mart数据仓库数据抽取时所用到技术是增量、全量、定时、调度STAGE层作用是提供业务系统数据文件的临时存储ODS层作用ods提供业务系统细节数据长期沉淀MID层…

Go TOKEN机制与跨域处理方式

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【Python推导式秘籍】:一行代码的艺术,高效数据处理之道

文章目录 &#x1f68b;Python推导式&#x1f680;一、列表推导式&#x1f308;1. 了解推导式❤️2. 实践&#x1f4a5;3. 总结 &#x1f680;二、字典推导式&#x1f308;1. 了解字典推导式❤️2. 实践&#x1f4a5;3. 总结 &#x1f680;三、集合推导式&#x1f308;1. 了解集…

Sobel边缘检测

声明&#xff1a;学习过程中的知识总结&#xff0c;欢迎批评指正。 基本原理 灰度处理&#xff1a;边缘检测是基于图像亮度变化实现的&#xff0c;而图像的亮度信息通过灰度图像体现&#xff0c;因此需要把彩色图像转换成灰度图像。平滑处理&#xff1a;可以使用高斯滤波等滤…

SUSTAINABILITY,SCIESSCI双检期刊还能投吗?

本期&#xff0c;小编给大家介绍的是一本MDPI出版社旗下SCIE&SSCI双检“毕业神刊”——SUSTAINABILITY。据悉&#xff0c;早在2024年1月&#xff0c;ElSEVIER旗下的Scopus数据库已暂停收录检索期刊SUSTAINABILITY所发表文章&#xff0c;同时重新评估是否继续收录该期刊。随…

【数据结构】——常见排序

文章目录 一、 冒泡排序二、 选择排序三、插入排序四、 快速排序1. hoare版本2. 优化版本3. 前后指针法4. 非递归版本 五、 堆排序六、 希尔排序七、 归并排序1. 递归版本2. 非递归版本 八、 计数排序 在开始之前先准备一个交换数据的函数&#xff0c;排序会经常用到 //交换位置…

【博士每天一篇文献-算法】Progressive Neural Networks

阅读时间&#xff1a;2023-12-12 1 介绍 年份&#xff1a;2016 作者&#xff1a;Andrei A. Rusu,Neil Rabinowitz,Guillaume Desjardins,DeepMind 研究科学家,也都是EWC(Overcoming catastrophic forgetting in neural networks)算法的共同作者。 期刊&#xff1a; 未录用&am…

Nginx配置详细解释:(6)实现反向代理服务器,动静分离,负载均衡

目录 单台反向代理 proxy_pass后面加不加/的问题&#xff1a; 反向代理动静分离 反向代理负载均衡 作为代理服务器是当客户端访问代理服务器时&#xff0c;代理服务器代理客户端去访问真实web服务器。proxy_pass; 用来设置将客户端请求转发给的后端服务器的主机。 需要模块…

【Unity学习笔记】第十八 基于物理引擎的日月地系统简单实现

转载请注明出处: https://blog.csdn.net/weixin_44013533/article/details/139701843 作者&#xff1a;CSDN|Ringleader| 目录 目标数学理论资源准备数据准备代码实现Unity准备效果展示注意事项后记 目标 目标&#xff1a;利用Unity的物理引擎实现 “日地月三体系统” 。 效果…

UC Berkeley简介以及和Stanford的区别与联系

UC Berkeley Source: Google Map 中文版 UC Berkeley&#xff0c;全称University of California, Berkeley&#xff0c;是一所位于美国加利福尼亚州伯克利市的世界知名公立研究型大学。以下是关于UC Berkeley的详细介绍&#xff1a; 学术声誉和排名 学术声誉&#xff1a; U…

VisionOS的未来愿景:苹果VisionPro创业者的愿望清单

随着苹果公司在增强现实(AR)领域的不断探索,VisionPro作为其前沿产品,已经开始展现出改变我们与数字世界互动方式的潜力。作为一名VisionPro创业者,对未来VisionOS的更新充满了期待,并提出了一系列愿望清单,这些愿望不仅代表了个人的需求,也反映了用户社区对苹果AR生态的…

LaDM3IL:多实例学习用于免疫库分类

一个人的免疫组库由某一时间点的大量适应性免疫受体组成&#xff0c;代表了该个体的适应性免疫状态。免疫组库分类和相关受体识别有可能为新型疫苗的开发做出贡献。大量的实例对免疫组库分类提出了挑战&#xff0c;这可以表述为大规模多实例学习 (MMIL&#xff0c;Massive Mult…

自动驾驶场景下TCP协议参数优化调整案例分享

RTT 往返时间&#xff0c;从tcp协议栈决定发包&#xff0c;到收到回包的时间。 包含本地驱动&#xff0c;网卡硬件&#xff0c;网线&#xff0c;交换机&#xff0c;收包方处理的耗时。需注意如果开了delayed ack&#xff0c;协议栈未做特殊处理&#xff08;默认没做&#xff…

Photoshop中颜色与色调的调整

Photoshop中颜色与色调的调整 Photoshop中的颜色模式RGB模式灰度模式位图模式索引模式CMYK模式Lab模式 Photoshop中的颜色/色调调整命令颜色/色调调整命令的分类亮度/对比度调整命令色阶命令曲线命令曝光度命令自然饱和度命令色相/饱和度命令色彩平衡命令照片滤镜调整命令通道混…

LLVM Cpu0 新后端10

想好好熟悉一下llvm开发一个新后端都要干什么&#xff0c;于是参考了老师的系列文章&#xff1a; LLVM 后端实践笔记 代码在这里&#xff08;还没来得及准备&#xff0c;先用网盘暂存一下&#xff09;&#xff1a; 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

[RL9] Rocky Linux 9.4 搭载 PG 16.1

副标题&#xff1a;Rocky Linux 9.4 升级实录&#xff0c;及 PG 16 相关内容 背景 Rocky Linux 9.4 (以下简称 RL) 于5月9日正式发布&#xff0c;本文记录了从 RL 9.3 升级到 9.4 的过程&#xff0c;以及升级前后的一些变化。 之前介绍过 RL 9 的相关内容&#xff0c;请戳&…

windows环境如何运行python/java后台服务器进程而不显示控制台窗口

1.通常我们在windows环境下使用Java或Python语言编写服务器程序&#xff0c;都希望他在后台运行&#xff0c;不要显示黑乎乎的控制台窗口&#xff1a; 2.有人写了一个bat文件: cd /d D:\lottery\server && python .\main.py 放到了开机自启动里&#xff0c;可是开机的…

MT2093 活动安排

贪心策略&#xff1a; 每次选择结束时间最早的活动 代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N 5e5 10; int n; struct pp {int a, b; } p[N]; bool cmp(pp x, pp y) {return x.b < y.b; } int ans 0;int main() {cin >>…

数据结构(DS)学习笔记(二):数据类型与抽象数据类型

参考教材&#xff1a;数据结构C语言版&#xff08;严蔚敏&#xff0c;吴伟民编著&#xff09; 工具&#xff1a;XMind、幕布、公式编译器 正在备考&#xff0c;结合自身空闲时间&#xff0c;不定时更新&#xff0c;会在里面加入一些真题帮助理解数据结构 目录 1.1数据…