Godot 的设计理念

既然你已经小试身手,让我们谈谈 Godot 的设计。

游戏引擎各不相同,以满足不同的需求。它们不仅提供一系列功能,而且每个引擎的设计都是独一无二的。这将导致不同工作流程和项目组织结构。这一切都源于它们各自的设计理念。

这个页面是为了帮助你通过godot的一些核心功能来理解它的工作原理. 这个页面既不是godot特性的介绍列表, 也不会对各个引擎做比较. 要知道哪一种引擎更适合你的项目, 你需要自己尝试一下并了解各个引擎对设计和局限性.

如果你在寻找引擎特性的概览,请观看 Godot explained in 5 minutes

面向对象的设计与组合

Godot凭借其灵活的场景系统和节点层次结构, 将面向对象设计作为其核心. 它试图远离严格的编程模式, 以提供直观的方式来构建游戏.

首先,Godot 可以让你把场景组合或聚合起来。这和嵌套的预制件是类似的:你可以创建 BlinkingLight 场景,并创建使用 BlinkingLight 的 BrokenLantern 场景。然后,创建一个充满 BrokenLantern 的城市。更改 BlinkingLight 的颜色、保存,城市中的所有 BrokenLantern 都会立即更新。

更重要的是,你可以从任何场景继承

Godot 场景可以是武器、角色、物品、门、关卡、关卡的一部分……任何你能想象的东西。它就像类一样,但也可以使用编辑器,纯代码或同时使用两者来编辑场景。

和其他几个 3D 引擎的 Prefab(预制体)不同,场景可以通过继承来扩展。你可以创建一个 Magician(魔术师)来扩展你的 Character(角色)。在编辑器中修改 Character 后 Magician 也会更新。这样的设计可以帮你保持项目结构与设计的一致性。

image0

Godot 还提供了不同类型的对象,称作节点,每种节点都有特定的用途。节点是场景树的一部分,最终继承自 Node 类。尽管引擎提供的碰撞形状等节点确实会被父节点物理实体所使用,但大多数节点都可以独立使用。

换句话说,Godot的节点并不像其他一些游戏引擎中的组件那样工作。

image1

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

完善的工具集

Godot尝试提供自己的工具来满足最常见的需求. 它具有专用的脚本工作区, 动画编辑器, tilemap编辑器, 着色器编辑器, 调试器, 分析器, 能够在本地和远程等设备上热重载的功能.

image2

我们的目标是提供一个完整的软件包来创建游戏以及持续的用户体验。只要有对应的导入插件,你就仍然可以使用外部程序进行编辑。或者你可以自己创建一个导入插件,比如 Tiled Map 导入器

这也是为什么 Godot 会提供自己的编程语言 GDScript 和 C# 的部分原因。GDScript 是为满足游戏开发人员和游戏设计师的需求而设计的,并且被紧密集成在引擎和编辑器中。

GDScript 让你能够使用基于缩进的语法编写代码,还可以检测类型,提供质量接近静态语言的自动补全。它还针对使用 Vector、Color 等内置类型的游戏代码进行了优化。

请注意,使用 GDExtension,你可以编写出使用类似 C、C++、Rust、D、Haxe、Swift 这类的编译语言编写的高性能代码,并且无需重新编译引擎。

请注意,3D 工作区不像 2D 工作区那样有那么多工具。你将需要使用外部的程序或插件来编辑地形,给复杂的角色模型制作动画等。Godot 提供了完整的 API,可以直接使用编写游戏的代码来扩展编辑器的功能。参见下面的 Godot 编辑器是一个 Godot 游戏

image4

Godot 2 的状态机编辑器插件,由 kubecz3k 开发。它使你可以直观地管理状态和转换。

开源

Godot 源代码采用了 MIT 许可证。这意味着它附带的所有技术也必须是自由的(自由使用、修改等)。大部分代码都是由贡献者从头开始开发的。

任何人都可以根据各自需求添加专有软件——当然它们是不会通过引擎一起提供. 包括Google AdMob或FMOD等, 如果需要可以作为第三方插件来提供.

另一方面,开放源代码意味着你可以学习并扩展引擎。你也可以很容易地调试游戏,因为 Godot 会使用堆栈跟踪打印所有错误,即使这些错误来自引擎本身。

备注

开放源码的协议不会以任何方式影响你用Godot所创作的作品 : 不会有附加条件影响Godot引擎与你用Godot制作的东西.

社区驱动

Godot开发自社区, 为其社区内外所有游戏开发者创造的. 由用户需求及公开讨论驱动核心更新. 核心开发人员的新功能通常将重点放在首先让大多数用户受益的方面.

即便如此,尽管只有屈指可数的全职的核心开发者, 但在撰写本文时, 该项目已有超过数千位贡献者。仁慈的程序员致力于完善他们可能需要的功能,因此你能在每个主要版本中都能看到引擎各个方面的改进。

Godot 编辑器是 Godot 游戏

Godot 编辑器是使用游戏引擎运行的,使用的是引擎自己的 UI 系统,可以在测试项目时热重载代码和场景,也可以在编辑器中运行游戏代码。这意味着相同的代码既可以用来构建游戏中的场景,又可以用来构建插件对编辑器进行扩展。

这带来了非常稳定且灵活的 UI 系统,并且编辑器本身就是由它自身驱动的。使用 @tool 注解,你就可以在编辑器中运行任何游戏代码。

image5

RPG in a Box 是一个用 Godot 2 制作的 RPG 体素编辑器。它使用 Godot 的 UI 工具制作了其基于节点的编程系统和界面的其余部分。

@tool 注解放在任何 GDScript 文件的顶部,文件将在编辑器中运行。这样,你就可以导入、导出插件,创建自定义级别编辑器之类的插件,或使用与项目中所使用的相同的节点和 API 来创建脚本。

备注

编辑器完全使用 C++ 编写并且静态地编译为二进制文件。这意味着你不能像导入一个拥有 project.godot 文件的普通项目一样导入它。

独立的 2D 和 3D 引擎

Godot 提供了专门的 2D 和 3D 渲染引擎。因此,2D 场景的基础单位是像素。尽管引擎是独立的,但你还是可以在 3D 中渲染 2D、在 2D 中渲染 3D,也可以在 3D 世界之上覆盖 2D 精灵和界面。