本文档记录了 Godot 的 2D 和 3D 编辑器的设计和功能,它们是引擎中操作场景对象的重要组成部分。这些编辑器提供了用户可视化创建、定位、缩放和旋转 2D 和 3D 空间中对象的界面。本文档侧重于这些编辑器的结构和实现,而不是从用户角度的使用方法。
有关整个编辑器架构的信息,请参阅 编辑器架构。有关检查器等特定编辑器组件的信息,请参阅 检查器系统。
Godot 中的 2D 和 3D 编辑器作为专门的编辑器插件实现,它们操作不同类型的节点。2D 编辑器 (CanvasItemEditor) 处理继承自 CanvasItem 类的 2D 对象,而 3D 编辑器 (Node3DEditor) 处理继承自 Node3D 的对象。这两个编辑器共享通用的设计元素,但针对各自的维度进行了专门化。
核心编辑器组件图
来源
2D 编辑器能够操作场景中的 2D 对象。它提供了用于选择、移动、缩放和旋转对象的工具,以及用于精确放置的吸附功能。
CanvasItemEditor 是作为插件实现的,它扩展了 VBoxContainer 并为编辑 2D 对象提供了统一的界面。它包含用于操作 2D 对象的各种工具和控件、用于可视化场景的视口以及处理输入、选择和变换的系统。
2D 编辑器类结构
来源
2D 编辑器提供了多种操作对象的工具
| 工具 | 描述 | 实现 |
|---|---|---|
| 选择 | 通过单击选择对象 | _select_click_on_item() |
| 列表选择 | 显示光标下的对象列表 | _selection_result_pressed() |
| 移动 | 移动选定的对象 | 拖动操作 |
| 缩放 | 缩放选定的对象 | 带手柄的拖动操作 |
| 旋转 | 旋转选定的对象 | 围绕轴心的拖动操作 |
| 编辑轴心 | 更改对象的轴心点 | 直接操作 |
| 平移 | 移动视口 | _pan_callback() |
| 标尺 | 测量距离 | 使用标尺绘制 |
来源
2D 编辑器包含一个全面的吸附系统,以帮助精确放置对象
来源
2D 编辑器使用复杂的系统来选择和变换对象
_get_canvas_items_at_pos() 和相关方法处理_save_canvas_item_state() 保存_commit_canvas_item_state() 提交更改来源
3D 编辑器提供用于操作场景中 3D 对象的工具,具有多个视口、导航控件和变换 gizmos。
Node3DEditor 管理多个 Node3DEditorViewport 实例,以提供 3D 场景的不同视图(顶视图、前视图、侧视图和透视视图)。每个视口都有自己的相机、导航控件和渲染设置。
3D 编辑器类结构
来源
3D 编辑器提供了多种导航 3D 空间的方式
这些控件作为专门的控件实现,它们响应鼠标和触摸输入来控制相机。
来源
3D 编辑器使用 gizmos 系统来操作对象。Gizmos 为变换操作提供视觉手柄。
Gizmo 架构
来源
虽然严格来说不是 2D 或 3D 编辑器,但视觉着色器编辑器是一个用于创建着色器的专用基于图的编辑器,它用于 2D 和 3D 渲染。
视觉着色器编辑器允许用户通过在图界面中连接节点来创建着色器
来源
视觉着色器系统支持不同的着色器类型和处理模式,具有广泛的节点类型
| 着色器类型 | 描述 |
|---|---|
| 顶点 | 处理顶点 |
| 片段 | 处理片段/像素 |
| 细体 | 处理光照计算 |
| 开始 | 用于粒子开始处理 |
| 进程 | 用于粒子更新处理 |
| 碰撞 | 用于粒子碰撞处理 |
| Sky (天空) | 用于天空着色器 |
| Fog (雾) | 用于雾效果 |
来源
尽管 2D 和 3D 编辑器服务于不同的目的,但它们共享一些通用概念和集成
来源
2D和3D编辑器都有用于特定节点类型的专用子编辑器
| 编辑器 | 目的 | 主类 |
|---|---|---|
| 多边形编辑器 | 编辑多边形形状 | Polygon2DEditor |
| 路径编辑器 | 编辑路径 | Path2DEditor |
| 碰撞形状编辑器 | 编辑碰撞形状 | CollisionShape2DEditor |
| 纹理区域编辑器 | 编辑纹理区域 | TextureRegionEditor |
| 光遮挡编辑器 | 编辑光遮挡 | LightOccluder2DEditor |
这些通过 gizmo 系统实现,具有针对不同节点类型的专用 gizmo 插件
来源
Godot中的2D和3D编辑器提供了操作各自维度对象的全面工具。它们共享通用概念,同时又针对特定领域进行了优化。基于插件的架构允许通过新功能和特定节点类型的专用工具来扩展这两个编辑器。
这些编辑器与Godot编辑器的其余部分深度集成,共享资源并提供统一的工作流程,同时仍然提供适合每个维度的专用工具。