当前位置: 首页 > news >正文

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.lryc.cn/news/367075.html

相关文章:

  • Mac下删除系统自带输入法ABC,正解!
  • redis学习路线
  • 数据库练习题
  • 【每日一函数】uname 函数介绍及代码演示
  • linux:命令别名,文件描述符及重定向
  • 前端开发之中svg图标的使用和实例
  • BeagleBone Black入门总结
  • 笔记:Mysql的安全策略
  • AI绘画中的图像格式技术
  • 前端如何封装自己的npm包并且发布到npm注册源
  • vue油色谱画 大卫三角形|大卫五边形|PD图
  • 【React】前端插件 uuidjs 的使用 --随机生成id
  • ctfshow-web入门-信息搜集(web11-web20)
  • C语言详解(动态内存管理)2
  • 【ubuntu软件版本管理】利用update-alternatives管理ubuntu软件
  • 如何把linux安装到单片机中
  • Ubuntu bash按Table不联想
  • Xcode中给UIView在xib中添加可视化的属性
  • 中缀表达式和前缀后缀
  • 强化学习面试题
  • Pytorch中的广播机制
  • 2024年全国一高考数学压轴题
  • springboot+vue前后端项目接口校验通信数据完整性
  • 进程通信(IPC-Inter Process Communication)
  • idea debug时提示”Method breakpoints may dramatically slow down debugging“的解决办法
  • 计算机缺失msvcp100.dll如何解决?教你5种简单高效的修复方法
  • 对硬盘的设想2:纸存,硬指针,软指针
  • Python在股票交易分析中的应用:布林带与K线图的实战回测
  • 现代密码学-认证、消息认证码
  • 在Java中为什么对a赋值为10,在进行a++时还是等于10呢