编辑器开发简介
在这一页,你将了解到:
Godot 编辑器背后的设计决策。
如何高效地处理Godot编辑器的C++代码。
本指南针对的是目前或未来的引擎贡献者。要在GDScript中创建编辑器插件,请参见 制作插件 。
参见
如果你是 Godot 的新手,建议你在继续之前先阅读 Godot 的设计理念 。由于 Godot 编辑器是用 C++ 编写的 Godot 项目,引擎的许多理念同样适用于编辑器。
技术选择
Godot 编辑器使用 Godot 的渲染器和 UI 系统绘制。它不依赖 GTK 或 Qt 这样的工具包。这与 Blender 等软件的精神相似。虽然使用工具包可以更容易地实现“原生”外观,但它们相当笨重,许可也与 Godot 的许可不兼容。
该编辑器完全是用C++编写的。它不能包含任何GDScript或C#代码。
目录结构
编辑器的代码完全独立于Godot源代码库的 editor/ 文件夹中。
一些编辑器的功能也是通过 modules 实现的。其中一些只在编辑器构建中启用,以减少导出模板的二进制文件大小。参见Godot源码库中的 modules/ 文件夹。
编辑器中的一些重要文件包括:
editor/editor_node.cpp :主编辑器初始化文件。相当于编辑器的“主场景”。
editor/editor_node.cpp :主编辑器初始化文件。相当于编辑器的“主场景”。
editor/plugins/canvas_item_editor_plugin.cpp:2D 编辑器的视区和相关功能(顶部的工具栏、编辑模式、重叠的助手/面板……)。
editor/plugins/spatial_editor_plugin.cpp:3D 编辑器视区及相关功能(顶部的工具栏、编辑模式、叠加面板……)。
editor/spatial_editor_gizmos.cpp: 定义和绘制3D编辑器小工具的地方. 这个文件没有2D的对应文件,因为2D的小工具是由节点自己绘制的。
scene/
中文件对编辑器的依赖性
在处理编辑器功能时,你可能需要修改Godot的GUI节点中的文件,你可以在 scene/
文件夹中找到。
需要记住的一条规则是,你不能给 editor/
在其他文件夹中引入新的依赖关系,如 scene/
。即使你使用 #ifdef TOOLS_ENABLED
也是如此。
为了使代码库更容易操作,更自成一体,允许的依赖性顺序是:
editor/
->scene/
->servers/
->core/
这意味着 editor/
中的文件可以依赖 scene/
, servers/
, 和 core/
中的包含。但是,虽然 scene/
可以依赖 servers/
和 core/
的内容,但它不能依赖 editor/
的内容。
目前,在 scene/
文件中存在一些对 editor/
的依赖,但 它们正在被删除 。
开发技巧
为了快速迭代编辑器,我们建议建立一个测试项目,并在编译编辑器后从命令行打开。这样,你就不必在每次启动 Godot 时都要经过项目管理器了。