网站制作厦门公司,app公司网站建设,蚌埠市建设工程质监站网站,网站免费推广平台有哪些文章目录 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” 脚本#xff0c;并将其放在 Editor 文件… 文章目录 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 GetWindowLesson38Window();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