Unity编辑器扩展入门——EditorGUIUtility 工具类
Lesson12 - EditorGUIUtility 工具类
EditorGUIUtility 概述
EditorGUIUtility 是 EditorGUI 的实用工具类,提供编辑器拓展开发中常用的辅助功能,如资源加载、对象选择、事件传递等。
资源加载 - Editor Default Resources
创建特殊文件夹
在 Assets 下创建 Editor Default Resources 文件夹(注意:文件夹名称必须完全相同,包括大小写和空格)。这个文件夹中的资源可以被 EditorGUIUtility 加载。
加载资源(不存在返回 null)
1 | Texture img = EditorGUIUtility.Load("HelloWorld.png") as Texture; |
如果资源不存在,返回 null。必须包含文件后缀名。
加载资源(不存在报错)
1 | Texture img = EditorGUIUtility.LoadRequired("HelloWorld.png") as Texture; |
如果资源不存在会直接报错。用于必须存在的资源。
对象选择器(Object Picker)
打开对象选择窗口
1 | EditorGUIUtility.ShowObjectPicker<Texture>(null, false, "Editor", 0); |
参数说明:
- 默认被选中的对象(null 表示无)
- 是否允许选择场景中的对象(false 只能选择项目资源)
- 名称过滤(如 “Editor” 表示文件名包含 Editor 的会显示)
- controlID(通常写 0)
监听选择事件
选择窗口打开后,通过事件监听获取用户的选择结果。
1 | Event currentEvent = Event.current; |
重要:需要在每次事件检查时缓存 Event.current,避免在布局计算期间多次访问导致布局错误。
正确做法:
1 | Event currentEvent = Event.current; |
对象高亮提示
PingObject
1 | EditorGUIUtility.PingObject(gameObject); |
在 Project 窗口或 Hierarchy 中高亮显示指定对象,用于提示用户某个对象的位置。
窗口间事件传递
发送自定义事件
从一个窗口向另一个窗口发送自定义事件。
1 | // 创建事件 |
接收事件
在目标窗口中监听事件。
1 | private void OnGUI() { |
发送事件时,如果允许一个窗口有多个可以用 CreateWindow API 创建窗口。
绘制色板(Color Swatch)
绘制颜色块
1 | EditorGUIUtility.DrawColorSwatch(new Rect(0, 0, 100, 100), color); |
在指定的矩形区域内绘制一个颜色块,通常配合 ColorField 使用。
绘制曲线(Curve Swatch)
绘制曲线预览
1 | EditorGUIUtility.DrawCurveSwatch( |
通常配合 CurveField 使用,在界面上预览曲线。
坐标转换
屏幕坐标与 GUI 坐标转换
1 | // GUI 坐标转屏幕坐标 |
- 屏幕坐标系:原点在屏幕左上角
- GUI 坐标系:原点在当前窗口左上角
鼠标光标
指定区域设置鼠标光标
1 | EditorGUIUtility.AddCursorRect(new Rect(x, y, width, height), MouseCursor.Link); |
常用 MouseCursor 枚举值:
- Arrow:普通箭头
- Text:文本光标
- ResizeVertical:垂直调整
- ResizeHorizontal:水平调整
- Link:链接光标
- MoveArrow:移动光标
- RotateArrow:旋转光标
- Pan:平移光标(手形)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 游戏开发笔记!
评论
