编辑器本身就是一个引擎场景: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 dockinspector/— editor_inspector、editor_properties(属性编辑器,反射自 Object 属性系统)scene/2d/、scene/3d/— canvas_item_editor_plugin、3D 视口与3d/gizmosscript/— script_editor_plugin、text_editor、find_in_filesrun/— 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 生成。