Godot 的设计理念

17 Mar 2025 | 5 分钟阅读

每个游戏引擎都不同,并且有不同的要求。这不仅提供了各种各样的功能;每个引擎的设计都是独特的。这导致了不同的工作流程和不同的游戏结构方法。

此页面帮助我们了解 Godot 的工作原理,从它的一些关键支柱开始。这不是可用功能的列表,也不是引擎比较。要了解任何引擎是否对我们的项目有用,我们需要亲自尝试并了解其设计和局限性。

面向对象的设计和组合

Godot 以面向对象的设计为核心,具有灵活的可视化系统和节点层次结构。它试图避免严格的编程模式,以直观的方式呈现我们游戏的结构。

首先,Godot 允许我们**组合**或**聚合**场景。这就像嵌套的预制件:我们可以创建一个**闪烁的灯**场景和一个使用**闪烁的灯**的**损坏的灯笼**场景。

然后,创建一个充满**损坏的灯笼**的城市。 更改**闪烁的灯**的颜色,保存,所有损坏的灯笼。 更改闪烁灯的颜色,保存,城市中所有的损坏灯笼将立即更新。

最重要的是,我们可以从任何场景继承。

一个 Godot 场景可以是一个武器、一个角色、一个物品、一扇门、一个关卡,一个关卡。 任何我们喜欢的东西。 它的工作方式类似于纯代码中的类,除了我们可以自由地使用编辑器设计它,仅使用代码,或者混合搭配两者。

我们可以创建一个扩展我们角色的魔法师,在编辑器中修改角色,魔法师也会更新。 这有助于我们构建项目,以便它们的结构与 Godot 设计匹配。

Godot's Design Philosophy

Godot 提供了不同类型的对象,称为节点,具有特定用途。 节点是树的一部分,并且始终从其父节点继承到节点类中。 尽管引擎具有诸如碰撞大小之类的组件,但它们是例外,而不是常态。

Godot's Design Philosophy

Sprite 是 Node2D,一个节点和一个 CanvasItem。 它具有其三个父类的所有属性和特性,例如绘制变换或自定义形状以及使用自定义着色器渲染的能力。

全包式套件

Gadot 试图提供他的工具来响应最常见的需求。 它具有专用的脚本工作区、动画编辑器、一个 **tilemap 编辑器**、一个 **shader 编辑器**、一个 **debugger**、一个 **provider**,以及在本地和远程设备上热重载的能力。

Godot's Design Philosophy

目标是拥有一个完整的包来创建游戏和持续的用户体验。 只要有导入插件,我们仍然可以使用外部程序。 或者我们可以创建一个,比如 **Tiled Map Importer**。

这也在一定程度上解释了为什么 Godot 使用它的编程语言 **GDscript** 和 **VisualScript**,以及 C#。 它们是为游戏开发者和游戏设计师的需求而设计的,并且与引擎和编辑器紧密集成。

GDScript 允许我们使用类似 Python 的语法编写简单的代码,但它可以检测类型并提供静态语言的自动完成质量。 它还针对具有内置扇区和颜色的游戏代码进行了优化。

请注意,使用 GDNative,我们可以使用编译语言(例如 CC ++RustPython(使用 Cython 编译器))编写高性能代码,而无需重新安装引擎

Godot's Design Philosophy

**VisualScript** 是一种基于节点的编程语言,在编辑器中集成良好。 我们可以将节点或资源拖放到图中以创建新的代码块。

请注意,3D 工作区没有 2D 工作区那么多的工具。 我们将需要外部程序或插件来编辑地形、动画复杂的角色。 Godot 提供了完整的 API,可以使用游戏代码扩展编辑器的功能。 请参阅下面的 Godot Editor,是一个 Godot 游戏

Godot's Design Philosophy

开源

Godot 在 MIT 许可下提供开源代码库。 与它一起发布的所有技术也都是免费的。 在大多数情况下,它们都是由贡献者从头开始编写的。

任何人都可以在需要时插入专有工具以满足其项目的需求; 但它们不能与引擎一起发布。 它们包括 NViDia

PhysX, Google Admob,或一个 FBX 文件导入器。 任何这些都可能以第三方插件的形式出现。

另一方面,开放的代码库意味着我们可以学习和扩展引擎,以满足我们的需求。 我们可以轻松调试游戏,因为 Godot 会打印带有堆栈跟踪的错误,即使它们来自引擎本身。

注意
它不会以任何方式影响我们使用 Godot 所做的工作。 引擎或我们用它做的任何东西都没有附加任何条件。

社区驱动

它是由它的社区为所有游戏创作者制作的。 用户的需求和公开讨论推动了公开讨论,从而推动了核心更新。 核心开发人员的新功能通常侧重于最能惠及大多数用户的功能。

核心开发人员全职工作,并且在撰写本文时,该产品拥有超过 500 名贡献者。 仁慈的程序员正在开发他们自己需要的功能,因此我们将在每个重要版本中同时看到引擎各个方面的改进。

Godot 编辑器是一个 Godot 游戏

Godot 编辑器在游戏引擎上运行。 它使用引擎的 UI 系统。 当我们运行项目时,它可以热重载代码和场景,或者在编辑器中运行游戏代码。 这意味着我们可以为我们的游戏使用相同的代码和场景,或者**构建插件**并**扩展编辑器**。

这导致了一个灵活可靠的 UI 系统,因为它增强了编辑器本身。 使用 **tool** 关键字,我们可以在编辑器中运行任何游戏代码。

Godot's Design Philosophy

SpongeBob in a box 是一个在 Godot 2 中创建的体素 RPG 编辑器。它使用 Godot 的 UI 工具来实现其基于节点的编程系统和界面的其余部分。

将 **tool** 键盘放在任何 GDScript 文件的顶部,它将在编辑器中运行。 这使我们可以导入和导出插件,创建像自定义关卡编辑器这样的插件,或者使用与我们在项目中使用的相同节点和 API 创建脚本。

独立的 2D 和 3D 引擎

Godot 提供了专用的 2D 和 3D 引擎。 因此,2D 场景的基本单位是像素。 即使驱动程序是分开的,我们也可以在 3D 中渲染 2D,在 2D 中渲染 3D,并在我们的 3D 世界中叠加 2D 精灵和界面。