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 的设计。
游戏引擎各不相同,以满足不同的需求。它们不仅提供一系列功能,而且每个引擎的设计都是独一无二的。这将导致不同工作流程和项目组织结构。这一切都源于它们各自的设计理念。
这个页面是为了帮助你通过godot的一些核心功能来理解它的工作原理. 这个页面既不是godot特性的介绍列表, 也不会对各个引擎做比较. 要知道哪一种引擎更适合你的项目, 你需要自己尝试一下并了解各个引擎对设计和局限性.
如果你在寻找引擎特性的概览,请观看 Godot explained in 5 minutes。
面向对象的设计与组合¶
Godot凭借其灵活的场景系统和节点层次结构, 将面向对象设计作为其核心. 它试图远离严格的编程模式, 以提供直观的方式来构建游戏.
首先,Godot 可以让你把场景组合或聚合起来。这和嵌套的预制件是类似的:你可以创建 BlinkingLight 场景,并创建使用 BlinkingLight 的 BrokenLantern 场景。然后,创建一个充满 BrokenLantern 的城市。更改 BlinkingLight 的颜色、保存,城市中的所有 BrokenLantern 都会立即更新。
更重要的是,你可以从任何场景继承。
Godot 场景可以是武器、角色、物品、门、关卡、关卡的一部分……任何你能想象的东西。它就像类一样,但也可以使用编辑器,纯代码或同时使用两者来编辑场景。
和其他几个 3D 引擎的 Prefab(预制体)不同,场景可以通过继承来扩展。你可以创建一个 Magician(魔术师)来扩展您的 Character(角色)。在编辑器中修改 Character 后 Magician 也会更新。这样的设计可以帮你保持项目结构与设计的一致性。
Godot 还提供了不同类型的对象,称作节点,每种节点都有特定的用途。节点是场景树的一部分,最终继承自 Node 类。尽管引擎提供的碰撞形状等节点确实会被父节点物理实体所使用,但大多数节点都可以独立使用。
换句话说,Godot的节点并不像其他一些游戏引擎中的组件那样工作。
Sprite2D is a Node2D, a CanvasItem and a Node. It has all the properties and features of its three parent classes, like transforms or the ability to draw custom shapes and render with a custom shader.
完善的工具集¶
Godot尝试提供自己的工具来满足最常见的需求. 它具有专用的脚本工作区, 动画编辑器, tilemap编辑器, 着色器编辑器, 调试器, 分析器, 能够在本地和远程等设备上热重载的功能.
The goal is to offer a full package to create games and a continuous user experience. You can still work with external programs as long as there is an import plugin available in Godot for it. Or you can create one, like the Tiled Map Importer.
That is also partly why Godot offers its own programming language GDScript along with C#. GDScript is designed for the needs of game developers and game designers, and is tightly integrated in the engine and the editor.
GDScript 使您可以使用基于缩进的语法编写代码,但是它可以检测类型,提供质量接近静态语言的自动补全。它还针对使用 Vector、Color 等内置类型的游戏代码进行了优化。
Note that with GDExtension, you can write high-performance code using compiled languages like C, C++, Rust, or Python (using the Cython compiler) without recompiling the engine.
请注意,3D 工作区不像 2D 工作区那样有那么多工具。你将需要使用外部的程序或插件来编辑地形,给复杂的角色模型制作动画等。Godot 提供了完整的 API,可以直接使用编写游戏的代码来扩展编辑器的功能。参见下面的 Godot 编辑器是一个 Godot 游戏。
Godot 2 的状态机编辑器插件,由 kubecz3k 开发。它使您可以直观地管理状态和转换。
开源¶
Godot 源代码采用了 MIT 许可证。这意味着它附带的所有技术也必须是自由的(自由使用、修改等)。大部分代码都是由贡献者从头开始开发的。
任何人都可以根据各自需求添加专有软件——当然它们是不会通过引擎一起提供. 包括Google AdMob或FMOD等, 如果需要可以作为第三方插件来提供.
另一方面,开放源代码意味着你可以学习并扩展引擎。你也可以很容易地调试游戏,因为 Godot 会使用堆栈跟踪打印所有错误,即使这些错误来自引擎本身。
备注
开放源码的协议不会以任何方式影响您用Godot所创作的作品 : 不会有附加条件影响Godot引擎与您用Godot制作的东西.
社区驱动¶
Godot开发自社区, 为其社区内外所有游戏开发者创造的. 由用户需求及公开讨论驱动核心更新. 核心开发人员的新功能通常将重点放在首先让大多数用户受益的方面.
就是说, 尽管只有少数全职的核心开发者, 但在撰写本文时, 该项目已有超过600位贡献者. 仁慈的程序员致力于完善他们可能需要的功能, 因此在每个主要版本中都能看到引擎各个方面的改进.
Godot 编辑器是 Godot 游戏¶
Godot 编辑器是使用游戏引擎运行的,使用的是引擎自己的 UI 系统,可以在测试项目时热重载代码和场景,也可以在编辑器中运行游戏代码。这意味着相同的代码既可以用来构建游戏中的场景,又可以用来构建插件对编辑器进行扩展。
This leads to a reliable and flexible UI system, as it powers the editor
itself. With the @tool
annotation, you can run any game code in the editor.
RPG in a Box 是一个用 Godot 2 制作的 RPG 体素编辑器。它使用 Godot 的 UI 工具制作了其基于节点的编程系统和界面的其余部分。
Put the @tool
annotation at the top of any GDScript file and it will run
in the editor. This lets you import and export plugins, create plugins
like custom level editors, or create scripts with the same nodes and API
you use in your projects.
备注
编辑器完全使用 C++ 编写并且静态地编译为二进制文件。这意味着你不能像导入一个拥有 project.godot
文件的普通项目一样导入它。
独立的 2D 和 3D 引擎¶
Godot分别提供了独立的2D和3D渲染引擎. 2D场景的基本单位使用的是像素. 即使引擎是分开的, 您依然可以在3D中渲染2D, 在2D中渲染3D, 也能在您的3D世界上叠加2D图片与界面.