编辑器本身就是一个引擎场景:EditorNode : Node(editor/editor_node.h:122)挂在根窗口下,整个编辑器 UI 用引擎自己的 Control/GUI 系统搭建。编辑器代码以 TOOLS_ENABLED 宏隔离(SConstruct:549),发布二进制不带编辑器。

启动路径

main/main.cpp 解析 -e/--editor 置 editor=true(:1541);Main::start() 中 memnew(EditorNode); sml->get_root()->add_child(editor_node)(:4569-4570),并 Engine::set_editor_hint(true)(:2183)。与运行时同一套 Main 主循环。

注:4.8 中没有 EditorMain 类,入口即 EditorNode。

EditorNode 组织

  • 布局:main_vbox + 6 个 DockSplitContainer(left_l/left_r/main_h/right_l/right_r/center,:308-313)
  • 菜单:file/project/debug/settings/help/tool/export_as 七个 PopupMenu(:346-353),MenuOptions 枚举(:145-232)
  • 停靠管理:EditorDockManager(:430),DockSlot 枚举 11 个停靠位(editor_dock.h:51-64):LEFT_UL/BL/UR/BR、RIGHT_UL/BL/UR/BR、BOTTOM/BOTTOM_L/R
  • 底部面板:EditorBottomPanel(:436)
  • 被编辑场景挂在 scene_root(SubViewport,:464)—— 与编辑器 UI 隔离的渲染目标
  • 插件:editor_plugins/init_plugins,EditorPlugin 基类

五个主屏

EditorMainScreen : PanelContainer(editor_main_screen.h:41),EditorTable 枚举 = 2D / 3D / Script / Game / AssetLib(:45-51),由 EditorPlugin 经 add_main_plugin 注册。

规模与主要子系统

editor/ 共 627 个 .cpp/.h,约 31.7 万行。关键子系统:

  • docks/ — scene_tree_dock、inspector_dock、filesystem_dock、groups/signals/history/import dock
  • inspector/ — editor_inspector、editor_properties(属性编辑器,反射自 Object 属性系统)
  • scene/2d/、scene/3d/ — canvas_item_editor_plugin、3D 视口与 3d/gizmos
  • script/ — script_editor_plugin、text_editor、find_in_files
  • run/ — editor_run_bar、embedded_process、game_view_plugin
  • 其他:project_manager/、export/、import/、asset_library/、debugger/、settings/、shader/、themes/、animation/

编辑器与文档系统

doc/classes/ 的 809 个 XML 在构建时被 editor/editor_builders.py:make_doc_header(:55)压缩嵌入为 C 头,编辑器内由 editor/doc/editor_help.h(EditorHelp:85)渲染为类参考;--doctool 命令行反向导出/合并 XML(main.cpp:658)。在线文档由 doc/tools/make_rst.py 从同一批 XML 生成。

相关