菜单

2D 和 3D 编辑器

相关源文件

本文档记录了 Godot 的 2D 和 3D 编辑器的设计和功能,它们是引擎中操作场景对象的重要组成部分。这些编辑器提供了用户可视化创建、定位、缩放和旋转 2D 和 3D 空间中对象的界面。本文档侧重于这些编辑器的结构和实现,而不是从用户角度的使用方法。

有关整个编辑器架构的信息,请参阅 编辑器架构。有关检查器等特定编辑器组件的信息,请参阅 检查器系统

概述

Godot 中的 2D 和 3D 编辑器作为专门的编辑器插件实现,它们操作不同类型的节点。2D 编辑器 (CanvasItemEditor) 处理继承自 CanvasItem 类的 2D 对象,而 3D 编辑器 (Node3DEditor) 处理继承自 Node3D 的对象。这两个编辑器共享通用的设计元素,但针对各自的维度进行了专门化。

核心编辑器组件图

来源

2D 编辑器 (CanvasItemEditor)

2D 编辑器能够操作场景中的 2D 对象。它提供了用于选择、移动、缩放和旋转对象的工具,以及用于精确放置的吸附功能。

结构和主要组件

CanvasItemEditor 是作为插件实现的,它扩展了 VBoxContainer 并为编辑 2D 对象提供了统一的界面。它包含用于操作 2D 对象的各种工具和控件、用于可视化场景的视口以及处理输入、选择和变换的系统。

2D 编辑器类结构

来源

工具和模式

2D 编辑器提供了多种操作对象的工具

工具描述实现
选择通过单击选择对象_select_click_on_item()
列表选择显示光标下的对象列表_selection_result_pressed()
移动移动选定的对象拖动操作
缩放缩放选定的对象带手柄的拖动操作
旋转旋转选定的对象围绕轴心的拖动操作
编辑轴心更改对象的轴心点直接操作
平移移动视口_pan_callback()
标尺测量距离使用标尺绘制

来源

吸附系统

2D 编辑器包含一个全面的吸附系统,以帮助精确放置对象

来源

选择和变换

2D 编辑器使用复杂的系统来选择和变换对象

  1. 选择通过 _get_canvas_items_at_pos() 和相关方法处理
  2. 变换时,原始状态通过 _save_canvas_item_state() 保存
  3. 变换后,使用 _commit_canvas_item_state() 提交更改
  4. 编辑器支持所有操作的撤销/重做

来源

3D 编辑器 (Node3DEditor)

3D 编辑器提供用于操作场景中 3D 对象的工具,具有多个视口、导航控件和变换 gizmos。

结构和视口

Node3DEditor 管理多个 Node3DEditorViewport 实例,以提供 3D 场景的不同视图(顶视图、前视图、侧视图和透视视图)。每个视口都有自己的相机、导航控件和渲染设置。

3D 编辑器类结构

来源

3D 编辑器提供了多种导航 3D 空间的方式

  1. 位置控件:用于移动相机位置
  2. 视角控件:用于调整相机方向
  3. 旋转控件:用于围绕对象旋转

这些控件作为专门的控件实现,它们响应鼠标和触摸输入来控制相机。

来源

Gizmos 系统

3D 编辑器使用 gizmos 系统来操作对象。Gizmos 为变换操作提供视觉手柄。

Gizmo 架构

来源

视觉着色器编辑器

虽然严格来说不是 2D 或 3D 编辑器,但视觉着色器编辑器是一个用于创建着色器的专用基于图的编辑器,它用于 2D 和 3D 渲染。

结构与组件

视觉着色器编辑器允许用户通过在图界面中连接节点来创建着色器

来源

节点类型和处理

视觉着色器系统支持不同的着色器类型和处理模式,具有广泛的节点类型

着色器类型描述
顶点处理顶点
片段处理片段/像素
细体处理光照计算
开始用于粒子开始处理
进程用于粒子更新处理
碰撞用于粒子碰撞处理
Sky (天空)用于天空着色器
Fog (雾)用于雾效果

来源

2D 和 3D 编辑器之间的集成

尽管 2D 和 3D 编辑器服务于不同的目的,但它们共享一些通用概念和集成

  1. 统一编辑器框架:两者都在同一编辑器框架中作为插件实现
  2. 通用工具:选择、变换和吸附的概念相似
  3. 共享资源:两者都可以使用相同的资源,如纹理、材质等。
  4. 过渡点:像 Sprite3D 这样的节点连接了 2D 和 3D 世界

来源

专用子编辑器

2D和3D编辑器都有用于特定节点类型的专用子编辑器

2D专用编辑器

编辑器目的主类
多边形编辑器编辑多边形形状Polygon2DEditor
路径编辑器编辑路径Path2DEditor
碰撞形状编辑器编辑碰撞形状CollisionShape2DEditor
纹理区域编辑器编辑纹理区域TextureRegionEditor
光遮挡编辑器编辑光遮挡LightOccluder2DEditor

3D专用编辑器

这些通过 gizmo 系统实现,具有针对不同节点类型的专用 gizmo 插件

  • 相机 gizmos
  • 灯光 gizmos
  • 网格 gizmos
  • 碰撞形状 gizmos
  • 音频 gizmos
  • 还有许多其他语言

来源

结论

Godot中的2D和3D编辑器提供了操作各自维度对象的全面工具。它们共享通用概念,同时又针对特定领域进行了优化。基于插件的架构允许通过新功能和特定节点类型的专用工具来扩展这两个编辑器。

这些编辑器与Godot编辑器的其余部分深度集成,共享资源并提供统一的工作流程,同时仍然提供适合每个维度的专用工具。