Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
编辑器开发简介
在这一页,你将了解到:
Godot 编辑器背后的设计决策。
如何高效地处理Godot编辑器的C++代码。
本指南针对的是目前或未来的引擎贡献者。要在GDScript中创建编辑器插件,请参见 制作插件 。
参见
如果你是 Godot 的新手,建议你在继续之前先阅读 Godot 的设计理念 。由于 Godot 编辑器是用 C++ 编写的 Godot 项目,引擎的许多理念同样适用于编辑器。
技术选择
Godot 编辑器是直接利用 Godot 自身的渲染器和 UI system 来绘制界面的。它并 没有 依赖像 GTK 或 Qt 这样的外部图形工具库。在这一点上,它的理念和 Blender 等软件非常相似。虽然使用外部工具库能更容易地实现与操作系统一致的 "原生" 外观,但这些库通常相当臃肿,而且它们的软件许可证与 Godot 的并不兼容。
该编辑器完全是用C++编写的。它不能包含任何GDScript或C#代码。
目录结构
编辑器的代码完全独立于Godot源代码库的 editor/ 文件夹中。
部分编辑器的功能也是通过 modules 来实现的。其中一些模块只在编辑器版本的构建中启用,以此来减小导出模板(export templates)的二进制文件体积。你可以在 Godot 源码仓库的 modules/ 文件夹里查看它们。
编辑器中的一些重要文件包括:
editor/editor_node.cpp:主编辑器初始化文件。相当于编辑器的“主场景”。
editor/project_manager/project_manager.cpp:这是项目管理器的主初始化文件。它实际上就相当于项目管理器的‘主场景(main scene)’。
editor/scene/canvas_item_editor_plugin.cpp:这里包含了 2D 编辑器的视口(Viewport)以及相关的功能(比如顶部的工具栏、各种编辑模式、覆盖在上面的辅助线/面板等等)。
editor/scene/3d/node_3d_editor_plugin.cpp:这里包含了 3D 编辑器的视口(Viewport)以及相关的功能(比如顶部的工具栏、各种编辑模式、覆盖在上面的面板等等)。
editor/scene/3d/node_3d_editor_gizmos.cpp:这里定义并绘制了 3D 编辑器中的各种 Gizmo(辅助线/控件)。该文件在 2D 方面没有对应的版本,因为 2D 的 Gizmo 是由节点自身负责绘制的。
scene/ 中文件对编辑器的依赖性
在处理编辑器功能时,你可能需要修改Godot的GUI节点中的文件,你可以在 scene/ 文件夹中找到。
需要记住的一条规则是,你不能给 editor/ 在其他文件夹中引入新的依赖关系,如 scene/。即使你使用 #ifdef TOOLS_ENABLED 也是如此。
为了使代码库更容易操作,更自成一体,允许的依赖性顺序是:
editor/->scene/->servers/->core/
这意味着 editor/ 中的文件可以依赖 scene/, servers/, 和 core/ 中的包含。但是,虽然 scene/ 可以依赖 servers/ 和 core/ 的内容,但它不能依赖 editor/ 的内容。
目前, scene/ (场景)目录下的文件中还存在一些对 editor/ (编辑器)目录头文件的依赖,不过它们正在被逐步移除 <https://github.com/godotengine/godot/issues/53295>`__。
开发技巧
为了能快速迭代编辑器,我们建议配置好一个测试项目,然后在编译完编辑器后,直接 open it from the command line 。这样一来,你每次启动 Godot 时就不必再经过项目管理器那一关了。