EditorWindow 和 EditorGUI
EditorWindow
所有对编辑器窗口的基本操作都来自于类 EditorWindow
提供的接口。以下是对 Unity 官方文档的摘要:
EditorWindow
说明 | 类型 | 使用方法 |
---|---|---|
当前拥有焦点/在鼠标下方的窗口 | 静态属性 | focusedWindow mouseOverWindow |
是否在场景变化时自动重绘窗口 | 属性 | autoRepaintOnSceneChange |
窗口的基本性质,是否最大化、最大尺寸、最小尺寸、位置、标题 | 属性 | maximized maxSize minSize position titleContent |
是否接收 MouseEnterWindow, MouseLeaveWindow, Mousemove 消息 | 属性 | wantsMouseEnterLeaveWindow wantsMouseMove |
开始/结束弹出窗口的绘制 | 公有方法 | BeginWindows EndWindows |
使某个窗口关闭/拥有焦点/显示/重绘 | 公有方法 | Close Focus Show Repaint |
给某个窗口发出一个消息 | 公有方法 | SendEvent |
在一个窗口中显示/移除通知 | 公有方法 | ShowNotification RemoveNotification |
将一个窗口显示为下拉窗口/辅助窗口/弹出窗口/浮动实用窗口的形式 | 公有方法 | ShowAsDropDown ShowAuxWindow ShowPopup ShowUtility |
将焦点放到某个打开的窗口上 | 静态方法 | FocusWindowIfItsOpen |
返回窗口,不存在则创建新的窗口 | 静态方法 | GetWindow GetWindowWithRect |
窗口首次打开/更新时调用 | 消息 | Awake Update |
窗口关闭/获得焦点/失去焦点时调用 | 消息 | OnDestroy OnFocus OnLostFocus |
绘制窗口 GUI 时调用 | 消息 | OnGUI |
Hierarchy 视图/ Inspector 视图/ Project 视图/被选物体发生变化时调用 | 消息 | OnHierarchyChange OnInspectorUpdate OnProjectChange OnSelectionChange |
除此之外, EditorWindow
继承于 ScriptableObject
类,所以也包含一些继承的基本属性和方法,这里不做赘述。
之后将会详细举例说明上述 EditorWindow
类中的常用属性、方法。
EditorGUI
之前已经简单介绍过 EditorGUI
更适用于新建的编辑器窗口。相比 EditorGUILayout
, EditorGUI
包含大量类似的方法,只需额外提供一个指定的绘制位置和尺寸。在实际使用过程中并不需要明确区分EditorGUILayout
和 EditorGUI
的优劣,依照情况灵活切换使用即可。
以下列举了 EditorGUI
中特有的方法:
EditorGUI
Name | 示例程序 | 说明 |
---|---|---|
BeginChangeCheck, EndChangeCheck | 包含的区域将会自动检查是否有数值变化 | |
BeginDisabledGroup, EndDisabledGroup | 包含的区域可以被禁用 | |
BeginProperty, EndProperty | ||
CanCacheInspectorGUI | 获取某个 SerializedProperty 的 Inspector GUI 是否可以被缓冲 | |
DrawPreviewTexture, DrawRect, DrawTextureAlpha | 绘制一个由预览贴图/普通颜色/含透明通道贴图填充的矩形区域 | |
DropShadowLabel | 绘制有阴影效果的标签 | |
FocusTextInControl | 将焦点移至某个特定的文本区域 | |
GetPropertyHeight | 获取绘制某个 PropertyField 所需的高度 | |
HandlePrefixLabel | 为控制区域生成一个前置标签 | |
MultiFloatField, MultiIntField | 一次性生成多个数值区域 | |
MultiPropertyField | 一次性生成多个 PropertyField | |
ProgressBar | 生成一个进度条 |