菜单

检查器系统

相关源文件

检视器系统是 Godot 引擎编辑器的一个核心组件,它提供了一个统一的界面来查看和编辑各种对象、资源和节点的属性。它负责以有组织的方式显示属性,为不同的属性类型提供适当的编辑器,并处理属性更新。

本文档涵盖了检视器系统的架构和功能,包括属性编辑器是如何创建的、数据如何在系统中流动以及如何扩展它。有关创建自定义编辑器或检视器插件的信息,请参阅编辑器架构编辑器插件

架构概述

检视器系统由几个关键组件组成,它们协同工作以提供属性编辑功能。

来源

该系统遵循模型-视图-控制器模式。

  • 模型:正在检查的对象及其属性。
  • 视图:EditorInspector 和各种 EditorProperty 实例,用于显示属性。
  • 控制器:InspectorDock,负责管理检视器并处理用户交互。

核心组件

EditorInspector

EditorInspector 是一个 ScrollContainer,用于显示和管理给定对象的属性编辑器。它负责:

  1. 为对象的每个属性创建合适的属性编辑器。
  2. 将属性组织到类别和部分中。
  3. 处理属性更新并传播更改。
  4. 管理撤销/重做操作。

来源

EditorProperty

EditorProperty 是检视器中所有属性编辑器的基类。它提供了:

  1. 所有属性编辑器的标准接口。
  2. 用于更新显示值的函数。
  3. 用于在属性值更改时发出通知的信号。
  4. 支持只读属性、可恢复属性以及其他功能。

每种特定的属性类型(int、float、string、color 等)都有一个继承自 EditorProperty 的专用编辑器。

来源

EditorInspectorPlugins

EditorInspectorPlugin 系统允许通过自定义编辑器扩展检视器。插件可以:

  1. 添加对自定义对象类型的支持。
  2. 用自定义编辑器覆盖默认属性编辑器。
  3. 在属性前后添加额外的控件。

来源

属性显示组织

检视器以分层结构组织属性。

复杂度描述示例
类别属性的顶层分组。"Node", "Transform"
章节类别内的子分组。"Position", "Rotation", "Scale"
属性单个属性编辑器。"x", "y", "z"
子属性。复杂属性的组成部分。数组的元素。

属性可以通过多种方式进行组织:

  1. 基于路径:名称类似于 "transform/position/x" 的属性会创建嵌套结构。
  2. 基于组:具有 PROPERTY_USAGE_GROUP 使用标志的属性会创建节。
  3. 基于子组:具有 PROPERTY_USAGE_SUBGROUP 使用标志的属性会创建子节。

来源

内置属性编辑器

Godot 检视器包含一套全面的内置属性编辑器,适用于所有原生类型。

属性类型编辑器类描述
BoolEditorPropertyCheck用于布尔值的复选框。
IntEditorPropertyInteger用于整数值的微调器。
浮点数EditorPropertyFloat用于浮点值的滑块或微调器。
字符串EditorPropertyText用于字符串编辑的文本字段。
颜色EditorPropertyColor颜色选择器。
资源EditorPropertyResource带预览的资源选择器。
Vector2/3/4EditorPropertyVector2/3/4向量的组件编辑器。
数组EditorPropertyArray数组元素的编辑器。
字典EditorPropertyDictionary键值对的编辑器。

属性编辑器根据属性类型和提示使用适当的 UI 控件。对于数值类型,EditorSpinSlider 提供了一个统一的界面,用于通过键盘、鼠标或拖动操作编辑值。

来源

资源编辑

检视器对资源属性提供特殊处理。

EditorResourcePicker 组件负责资源选择、创建、加载和基本操作。它在可能的情况下显示资源的预览,并提供一个包含各种资源操作的上下文菜单。

来源

数组和字典编辑

数组和字典等复杂类型拥有专门的编辑器。

数组编辑器提供了以下控件:

  1. 更改数组大小。
  2. 添加和删除元素。
  3. 更改元素类型(适用于变体数组)。
  4. 重新排序元素。
  5. 使用合适的编辑器编辑元素值。

字典编辑器提供类似的功能,并额外支持编辑键和值。

来源

数据流和更新

检视器在 UI 和底层对象之间维护双向数据流。

更新周期经过仔细管理,以防止在属性相互依赖或更新一个属性影响其他属性时发生无限循环。

来源

InspectorDock 集成

InspectorDock 类将检视器集成到编辑器界面中。

  1. 它创建并管理 EditorInspector 实例。
  2. 提供常见操作的按钮(资源保存、对象编辑)。
  3. 管理已编辑对象的历史记录。
  4. 处理编辑器中的对象选择。

来源

扩展检视器

检视器可以通过多种方式进行扩展:

  1. EditorInspectorPlugin:为特定对象类型或属性创建自定义编辑器。
  2. EditorProperty 子类:为特定类型创建自定义属性编辑器。
  3. 属性提示:使用属性提示来控制标准编辑器的行为。

自定义属性编辑器创建的示例流程。

来源

性能考量

检视器系统设计用于高效处理具有许多属性的对象。

  1. 属性编辑器是在展开某个部分时按需创建的。
  2. 更新经过批处理以最大限度地减少重绘。
  3. 检视器对大型数组使用分页方法。
  4. 使用自定义缓存机制来避免冗余更新。

来源

无障碍功能

检视器包含多项辅助功能

  1. 属性之间的键盘导航
  2. 屏幕阅读器支持,具备适当的标签和描述
  3. 一致的焦点处理
  4. 带附加信息的工具提示

来源