📋

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 更适用于新建的编辑器窗口。相比 EditorGUILayoutEditorGUI 包含大量类似的方法,只需额外提供一个指定的绘制位置和尺寸。在实际使用过程中并不需要明确区分EditorGUILayoutEditorGUI 的优劣,依照情况灵活切换使用即可。

以下列举了 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生成一个进度条