目录
- 1. EditorGUIUtility
- 1.1 参数总览
- 1.2 选中提示: PingObject
- 1.3 搜索框: ShowObjectPicker
- 1.4 currentViewWidth
- 1.5 fieldWidth
- 1.6 labelWidth
- 1.7 singleLineHeight
- 1.8 IconContent
- 2. EditorUtility
- 2.1 参数总览
- 2.2 “脏”标志:ClearDirty、IsDirty、SetDirty
- 2.3 进度条:ClearProgressBar、DisplayCancelableProgressBar、DisplayProgressBar
- 2.4 提示框:DisplayDialog、DisplayDialogComplex、DisplayPopupMenu
- 2.5 打开文件对话框:OpenFilePanel、OpenFilePanelWithFilters、OpenFolderPanel
- 2.6 保存文件对话框:SaveFilePanel、SaveFilePanelInProject、SaveFolderPanel
- 2.6 SetObjectEnabled、GetObjectEnabled
- 3. GUIUtility
- 3.1 参数总览
- 4. GUILayoutUtility
- 4.1 参数总览
- 5. 总结
1. EditorGUIUtility
1.1 参数总览
静态函数 描述 AddCursorRect 向控件添加自定义鼠标指针。 CommandEvent 创建可以发送到另一个窗口的事件。 DrawColorSwatch 绘制颜色样本。 DrawCurveSwatch 绘制曲线样本。 DrawRegionSwatch 绘制在两条 SerializedProperty 曲线之间具有填充区域的样本。 FindTexture 从源文件名中获取纹理。 GetBuiltinSkin 获取其中一个内置 GUI 皮肤,可以是按参数选择的游戏视图、检视面板或场景视图皮肤。 GetFlowLayoutedRects 在给定区域中按从左到右、从上到下的方式布置字符串项的列表。 GetIconForObject 获取与对象关联的自定义图标。只有 GameObjects 和 MonoScripts 具有关联的自定义图标。 GetIconSize 获取已使用 SetIconSize 设置的大小。 GetMainWindowPosition 返回 Unity 编辑器主窗口的位置。 GetObjectPickerControlID 当前显示的 Object Picker 的 controlID。 GetObjectPickerObject Object Picker 中当前选中的对象。 HasObjectThumbnail 给定的类是否具有针对每个对象的缩略图? IconContent 从具有给定名称的 Unity 内置资源中获取 GUIContent。 IsDisplayReferencedByCameras 检查是否有任何已启用的摄像机可以渲染到特定显示屏。 Load 加载内置资源。 LoadRequired 加载所需的内置资源。 LookLikeControls 使所有 EditorGUI 看起来像常规控件。 ObjectContent 返回具有某个 Object 的名称和图标的 GUIContent 对象。 PingObject 在场景中对对象执行 Ping 操作,就像在检视面板中单击它一样。 PixelsToPoints 从像素空间转换为点空间。 PointsToPixels 从点空间转换为像素空间。 QueueGameViewInputEvent 将输入事件发送到游戏中。 SetIconForObject 设置与 GameObject 或 MonoScript 关联的自定义图标。自定义图标显示在场景视图和检查器中。 SetIconSize 将渲染为 GUIContent 一部分的图标设置为以特定大小渲染。 SetMainWindowPosition 设置 Unity 编辑器主窗口的位置。 ShowObjectPicker 通过代码显示 Object Picker。 1.2 选中提示: PingObject
- 在场景中对对象执行 Ping 操作,就像在检视面板中单击它一样。
PingObject 将促使 Hierarchy 突出显示已执行 Ping 操作的对象。不必选择 已执行 Ping 操作的对象。例如,可以用于 GameObject.Find 来查找 要执行 Ping 操作的对象。
[MenuItem("Examples/Ping Selected")] static void Ping() { if (!Selection.activeObject) { Debug.Log("Select an object to ping"); return; } EditorGUIUtility.PingObject(Selection.activeObject); }
1.3 搜索框: ShowObjectPicker
private Texture tex; ... if (GUILayout.Button("查找法线贴图")) { //参数释义 //1. 查找对象的引用 //2. 是否允许查找场景对象 //3. 查找对象名称过滤(比如这里的normal是指文件名称中有normal的会被搜索到) //4. controlID, 默认写0 EditorGUIUtility.ShowObjectPicker
(tex, false, "normal", 0); } 1.4 currentViewWidth
- 这个值和position.width的值,它们近似相等
if (GUILayout.Button("Test")) { Debug.Log(EditorGUIUtility.currentViewWidth); Debug.Log(this.position.width); }
1.5 fieldWidth
- 为 Editor GUI 控件字段保留的最小宽度(以像素为单位)。
大多数 Editor GUI 控件由标签和控制字段本身组成。字段的最小宽度由 fieldWidth 值控制。字段通常看起来比最小宽度要宽,因为 Editor GUI 控件通常设置为占用一个 Rect,该 Rect 会扩展以填充可用的水平空间。在此 Rect 中,该字段将占用 EditorGUIUtility.labelWidth 未使用的所有空间。
1.6 labelWidth
- 为 Editor GUI 控件标签保留的宽度(以像素为单位)。
Editor GUI 控件为标签分配了特定的宽度。可通过将 labelWidth 设置为不同的值来更改此宽度。将其设置为 0 会将标签宽度重置为默认值。默认值可能有所不同,例如,取决于 Inspector 窗口的宽度。
EditorGUIUtility.labelWidth = 50; EditorGUILayout.TextField("Label", "Text");
1.7 singleLineHeight
- 获取用于单个 Editor 控件(如单行 EditorGUI.TextField 或 EditorGUI.Popup)的高度。
当您创建自己的多行控件(例如具有多个字段的自定义类的控件)时,可以使用 EditorGUILayout.GetControlRect 并传入一个高度值,该值是 EditorGUIUtility.singleLineHeight 的倍数。这比硬编码特定像素值更可取。
1.8 IconContent
- 从具有给定名称的 Unity 内置资源中获取 GUIContent。
EditorGUIUtility.IconContent 用于为 GUI 元素创建 GUIContent。 只会加载图标.通常情况下,将使用第一个参数获取 Assets/Editor Default Resources/Icons 中的图标。 只需要图标的名称,而不需要 png 扩展名。 \ 第二个参数为悬停工具提示提供文本。此字符串 需要以竖线“|”字符开头以将其标记为工具提示。\ \ 注意:目前无法悬停定位在工具提示上方。
2. EditorUtility
2.1 参数总览
静态函数 描述 ClearDefaultParentObject C从特定场景或活动场景中清除默认父游戏对象。 ClearDirty 清除 target 的“脏”标志。 ClearProgressBar 删除进度条。 CollectDeepHierarchy 收集层级视图中以每个指定对象为根对象的所有对象。 CollectDependencies 计算并返回 roots 中列出的资源所依赖的所有资源的列表。 CompressCubemapTexture 压缩立方体贴图纹理。 CompressTexture 压缩纹理。 CopySerialized 复制 Unity Object 的所有设置。 CopySerializedIfDifferent 将 Unity Object 的所有设置复制到第二个 Object(如果两者不同)。 CopySerializedManagedFieldsOnly 在不同的托管对象之间复制可序列化的字段。 CreateGameObjectWithHideFlags 使用 HideFlags 和指定组件创建游戏对象。 DisplayCancelableProgressBar 显示或更新含有 Cancel 按钮的进度条。 DisplayDialog 此方法显示模态对话框。 DisplayDialogComplex 显示含有三个按钮的模态对话框。 DisplayPopupMenu 显示弹出菜单。 DisplayProgressBar 显示或更新进度条。 FocusProjectWindow 将 Project 窗口置于前面并聚焦该窗口。 FormatBytes 返回有关字节数的文本。 GetDialogOptOutDecision 此方法显示模态对话框,使用户可以选择不再次显示当前对话框。 GetDirtyCount 返回一个整数,指示更改指定对象的序列化属性的次数。 GetObjectEnabled 对象是否已启用(0 表示已禁用,1 表示已启用,-1 表示没有 Enabled 按钮)。 InstanceIDToObject 将实例 ID 转换为对对象的引用。 IsDirty 获取一个布尔值,指示指定对象自上次保存以来是否已更改。 IsPersistent 确定对象是否存储在磁盘中。 IsRunningUnderCPUEmulation 获取一个布尔值。该值指示您的 CPU 是否无法本机执行 Unity 并正在运行模拟版本。 IsUnityExtensionsInitialized 返回一个布尔值,表示 Unity 扩展的初始化状态。 IsValidUnityYAML 如果提供的字符串可以解析为 YAML,则返回 true。 NaturalCompare 仿人类排序。 OpenFilePanel 显示“打开文件”对话框并返回所选的路径名称。 OpenFilePanelWithFilters 显示“打开文件”对话框并返回所选的路径名称。 OpenFolderPanel 显示“打开文件夹”对话框并返回所选的路径名称。 OpenPropertyEditor 打开对象的属性编辑器。 RequestScriptReload Unity 编辑器会在下一帧上异步重新加载脚本程序集。这会重置所有脚本的状态,但是 Unity 不会编译任何自上次编译以来已更改的代码。 SaveFilePanel 显示“保存文件”对话框并返回所选的路径名称。 SaveFilePanelInProject 在项目的 Assets 文件夹中显示“保存文件”对话框并返回所选的路径名称。 SaveFolderPanel 显示“保存文件夹”对话框并返回所选的路径名称。 SetCameraAnimateMaterials 设置此摄像机以启用编辑器中的材质动画。 SetCameraAnimateMaterialsTime 为此摄像机设置渲染时使用的全局时间。 SetCustomDiffTool 设置自定义差异工具设置。 SetDefaultParentObject 设置活动场景的默认父对象。 SetDialogOptOutDecision 此方法显示模态对话框,使用户可以选择不再次显示当前对话框。 SetDirty 将目标对象标记为脏。 SetObjectEnabled 设置对象的启用状态。 SetSelectedRenderState 为此渲染器将场景视图设置为所选的显示模式。 UnloadUnusedAssetsImmediate 卸载未使用的资源。 UpdateGlobalShaderProperties 更新渲染时使用的全局着色器属性。 2.2 “脏”标志:ClearDirty、IsDirty、SetDirty
- Unity 使用“脏”标志查找必须保存到磁盘的已更改资源。如果对资源进行的更改无需保存(例如以后会恢复的临时更改)
- ClearDirty: 使用ClearDirty清除“脏”标志。
- IsDirty:判断是否带有“脏”标志。
- SetDirty:将对象标记为脏。当您想要修改对象而不撤消时,可以使用SetDirty,但仍要确保更改已保存且不会丢失。如果对象是场景的一部分,则该场景被标记为脏。
2.3 进度条:ClearProgressBar、DisplayCancelableProgressBar、DisplayProgressBar
- ClearProgressBar: 删除进度条。
- DisplayCancelableProgressBar: 显示或更新含有 Cancel 按钮的进度条。
- DisplayProgressBar: 显示或更新进度条。
using Unity.VisualScripting; using Unity.VisualScripting.YamlDotNet.Core.Tokens; using UnityEditor; using UnityEngine; public class EditorGUIExample : EditorWindow { [MenuItem("Examples/ProgressBar(")] static void Init() { UnityEditor.EditorWindow window = GetWindow(typeof(EditorGUIExample)); window.position = new Rect(0, 0, 150, 60); window.Show(); } private float value; //定义进度条填充值 private void OnGUI() { if (GUILayout.Button("增加进度")) //手动增加进度 { value += 0.1f; value = Mathf.Clamp01(value); //约束value值到0~1 } EditorUtility.DisplayProgressBar("进度条", "显示信息", value); //显示进度条 if (value == 1) { EditorUtility.ClearProgressBar(); //关闭进度条 } } }
2.4 提示框:DisplayDialog、DisplayDialogComplex、DisplayPopupMenu
- DisplayDialog: 显示模态对话框。
- DisplayDialogComplex: 显示含有三个按钮的模态对话框。
- DisplayPopupMenu: 显示弹出菜单。
DisplayDialog
EditorUtility.DisplayDialog("Title", "Message", "ok", "cancel");
DisplayDialogComplex
EditorUtility.DisplayDialogComplex("Title", "Message", "ok", "cancel", "alt");
DisplayPopupMenu
if (GUILayout.Button("对话框")) { Event evt = Event.current; Vector2 mousePos = evt.mousePosition; EditorUtility.DisplayPopupMenu(new Rect(mousePos.x, mousePos.y, 0, 0), "Assets/", null); }
2.5 打开文件对话框:OpenFilePanel、OpenFilePanelWithFilters、OpenFolderPanel
- OpenFilePanel: 显示“打开文件”对话框并返回所选的路径名称。
- OpenFilePanelWithFilters: 显示“打开文件”对话框并返回所选的路径名称。
- OpenFolderPanel: 显示“打开文件夹”对话框并返回所选的路径名称。
OpenFilePanel
private void OnGUI() { if (GUILayout.Button("OpenFilePanel")) { string path = EditorUtility.OpenFilePanel("png", "", "png"); } }
OpenFilePanelWithFilters
if (GUILayout.Button("OpenFilePanelWithFilters")) { string path = EditorUtility.OpenFilePanelWithFilters("png", "", new string[] { "Image files", "png,jpg,jpeg", "All files", "*" }); }
OpenFolderPanel
private void OnGUI() { if (GUILayout.Button("OpenFolderPanel")) { string path = EditorUtility.OpenFolderPanel("Load png Textures", "", ""); } }
2.6 保存文件对话框:SaveFilePanel、SaveFilePanelInProject、SaveFolderPanel
- SaveFilePanel: 显示“保存文件”对话框并返回所选的路径名称。
- SaveFilePanelInProject: 在项目的 Assets 文件夹中显示“保存文件”对话框并返回所选的路径名称。
- SaveFolderPanel: 显示“保存文件夹”对话框并返回所选的路径名称。
SaveFilePanel
private void OnGUI() { if (GUILayout.Button("SaveFilePanel")) { var path = EditorUtility.SaveFilePanel( "Save texture as PNG", "", "texture.png", "png"); } }
SaveFilePanelInProject
if (GUILayout.Button("SaveFilePanelInProject")) { string path = EditorUtility.SaveFilePanelInProject("Save png", "texture.png", "png", "Please enter a file name to save the texture to"); }
SaveFolderPanel
if (GUILayout.Button("SaveFolderPanel")) { string path = EditorUtility.SaveFolderPanel("Save textures to folder", "", ""); }
2.6 SetObjectEnabled、GetObjectEnabled
- 设置/获取对象的启用状态。
3. GUIUtility
3.1 参数总览
静态函数 描述 AlignRectToDevice 将本地空间矩形与像素网格对齐。 ExitGUI 通过抛出 ExitGUIException 来将 GUI 置于这样一种状态:阻止所有后续即时模式 GUI 函数计算 GUI 循环的其余部分。 GetControlID 为控件获取一个唯一的 ID。 GetStateObject 从 controlID 获取状态对象。 GUIToScreenPoint 将一个点从 GUI 位置转换为屏幕空间位置。 GUIToScreenRect 将矩形从 GUI 位置转换到屏幕空间。 QueryStateObject 从 controlID 获取一个现有的状态对象。 RotateAroundPivot 让 GUI 围绕一个点旋转的 Helper 函数。 ScaleAroundPivot 让 GUI 围绕一个点缩放的 Helper 函数。 ScreenToGUIPoint 将一个点从屏幕空间位置转换为 GUI 位置。 ScreenToGUIRect 将矩形从屏幕空间转换到 GUI 位置。 4. GUILayoutUtility
4.1 参数总览
静态函数 描述 GetAspectRect 保留一个具有特定宽高比的矩形布局空间。 GetLastRect 获取 GUILayout 最后用于控件的矩形。 GetRect 保留一个矩形布局空间,以显示某些具有特定样式的内容。 5. 总结
-
EditorGUIUtility、EditorUtility、GUIUtility、GUILayoutUtility都是Unity编辑器中用于UI开发的工具类,但它们的功能和使用场景有所不同。
- EditorGUIUtility:主要用于编辑器界面的UI开发,提供了创建和管理编辑器界面的工具和函数。它继承自GUIUtility,因此具有GUIUtility的所有功能。
- EditorUtility:一个辅助类,主要用于编辑器脚本的开发。它提供了一系列实用的静态方法,用于处理编辑器中的各种任务,例如获取场景中的相机、设置游戏对象的属性等。
- GUIUtility:一个基础的UI绘制类,主要用于在场景中创建和管理UI元素。它提供了很多基础的UI组件,例如按钮、标签、滑动条等,但需要手动设置控件的位置和大小。
- GUILayoutUtility:类似于GUIUtility,用于在场景中创建和管理UI元素。但它提供了自动布局的功能,可以自动调整控件的位置和大小,使其适应不同的屏幕尺寸和分辨率。
-
总结来说,EditorGUIUtility主要用于编辑器界面的UI开发,EditorUtility主要用于编辑器脚本的开发,GUIUtility提供基础的UI组件但需要手动布局,而GUILayoutUtility则提供了自动布局的功能。
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1vi5kv7wjb1cc
-
- 设置/获取对象的启用状态。
- 从具有给定名称的 Unity 内置资源中获取 GUIContent。
- 获取用于单个 Editor 控件(如单行 EditorGUI.TextField 或 EditorGUI.Popup)的高度。
- 为 Editor GUI 控件标签保留的宽度(以像素为单位)。
- 为 Editor GUI 控件字段保留的最小宽度(以像素为单位)。
- 这个值和position.width的值,它们近似相等
- 在场景中对对象执行 Ping 操作,就像在检视面板中单击它一样。
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章