本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正。英文原版页面:
Godot's design philosophy — Godot Engine (stable) documentation in English
Godot设计理念
既然你已经了解了,让我们来谈谈 Godot 的设计。
每个游戏引擎都是不同的,适合不同的需求。 它们不仅提供一系列功能,而且每台发动机的设计都是独一无二的。这导致形成游戏结构的不同工作流程和不同方式。这一切都源于他们各自的设计理念。
此页面旨在帮助您了解 Godot 的工作原理,从它的一些核心支柱开始。它不是可用功能列表,也不是引擎比较。要了解是否有任何引擎适合您的项目,您需要亲自尝试并了解其设计和局限性。
如果您正在寻找引擎功能的概述,请观看Godot explained in 5 minutes
面向对象的设计与组合¶
Godot 以其灵活的场景系统和节点层次结构将面向对象的设计作为其核心。它试图远离严格的编程模式,以提供一种直观的方式来构建您的游戏。
其一,Godot 可让您组合或聚合场景。它就像嵌套的预制件:您可以创建一个 BlinkingLight 场景和一个使用 BlinkingLight 的 BrokenLantern 场景。然后,创建一个用 BrokenLanterns 填充的城市。改变 BlinkingLight 的颜色,保存,城市中所有的 BrokenLanterns 将立即更新。
最重要的是,您可以从任何场景继承。
Godot 场景可以是武器、角色、物品、门、关卡、关卡的一部分……任何你想要的东西。它像纯代码中的类一样工作,除了您可以使用编辑器、仅使用代码或混合和匹配两者来自由设计它。
它不同于您在其它 3D 引擎中找到的预制件,因为您可以继承和扩展这些场景。您可以创建一个Magician 来扩展您的Character。在编辑器中修改Character,Magician也会更新。它可以帮助您构建项目,使其结构与游戏设计相匹配。
另请注意,Godot 提供了许多不同类型的对象,称为节点,每个对象都有特定的用途。节点是树的一部分,并且总是从它们的父节点继承到 Node 类。Godot中,大多数节点彼此独立工作,但也有一些节点被父物理体所使用,如碰撞形状。
换句话说,Godot 的节点不像其他一些游戏引擎中的组件那样工作。
Sprite2D 是一个 Node2D,也是一个 CanvasItem,还是一个 Node。它具有其三个父类的所有属性和特性,例如变换或绘制自定义形状和使用自定义着色器进行渲染的能力。
集大全的包¶
Godot 试图提供自己的工具来满足最常见的需求。它有一个专用的脚本工作区、一个动画编辑器、一个瓷砖地图编辑器、一个着色器编辑器、一个调试器、一个分析器、在本地和远程设备上热重载的能力等。
目标是提供一个完整的包来创建游戏和持续的用户体验。不仅可使用Godot 中的导入插件,您仍然可以使用外部程序。或者您可以创建一个,例如Tiled Map Importer。
这也是 Godot 提供自己的编程语言 GDScript 和 C# 的部分原因。GDScript 专为游戏开发人员和游戏设计人员的需求而设计,并紧密集成在引擎和编辑器中。
GDScript 允许您使用基于缩进的语法编写代码,但它会检测类型并提供静态语言的自动完成质量。它还针对具有内置类型(如矢量和颜色)的游戏代码进行了优化。
请注意,基于 GDExtension,您可以使用 C、C++、Rust 或 Python(使用 Cython 编译器)等编译语言编写高性能代码,而无需重新编译引擎。
请注意,3D 工作区的工具数量不如 2D 工作区多。您将需要外部程序或附加组件来编辑地形、制作复杂角色的动画等等。Godot 提供了一个完整的 API 来使用游戏代码扩展编辑器的功能。请参阅下面的Godot 编辑器是一款 Godot 游戏。
kubecz3k 的 Godot 2 中的状态机编辑器插件。它使您可以直观地管理状态和转换。
开源¶
Godot 在MIT 许可证下提供了一个完全开源的代码库。这意味着它附带的所有技术也必须是免费的(就像自由一样)。在大多数情况下,它们是由贡献者从头开始开发的。
任何人都可以根据项目的需要插入专有工具——只是它们不会随引擎一起提供。这可能包括 Google AdMob 或 FMOD。这些中的任何一个都可以作为第三方插件出现。
另一方面,开放的代码库意味着您可以从引擎中学习并将其扩展到您心中的内容。您还可以轻松调试游戏,因为 Godot 会使用堆栈跟踪打印错误,即使它们来自引擎本身。
注:这不会以任何方式影响您使用 Godot 所做的工作:引擎或您使用它制作的任何东西都没有附加条件。
社区驱动¶
Godot 由其社区、为社区以及所有游戏创作者制作。用户的需求和开放的讨论推动了核心更新。核心开发人员的新功能通常侧重于最先让大多数用户受益的功能。
也就是说,虽然有少数核心开发人员全职工作,但在撰写本文时,该项目已有 600 多名贡献者。仁慈的程序员致力于他们自己可能需要的功能,因此您会在每个主要版本中同时看到引擎各个角落的改进。
Godot 编辑器是一款 Godot 游戏¶
Godot 编辑器在游戏引擎上运行。它使用引擎自己的 UI 系统,它可以在您测试项目时热重载代码和场景,或者在编辑器中运行游戏代码。这意味着您可以为您的游戏使用相同的代码 和场景,或者构建插件和扩展编辑器。
这导致了一个可靠且灵活的 UI 系统,因为它为编辑器本身提供了动力。通过@tool
注释,您可以在编辑器中运行任何游戏代码。
RPG in a Box 是使用 Godot 2 制作的voxel RPG 编辑器。它使用 Godot 的 UI 工具用于其基于节点的编程系统和界面的其余部分。
将@tool
注释放在任何 GDScript 文件的顶部,它将在编辑器中运行。这使您可以导入和导出插件,创建自定义关卡编辑器之类的插件,或使用您在项目中使用的相同节点和 API 创建脚本。
注:该编辑器完全用 C++ 编写,并静态编译为二进制文件。这意味着您不能将其作为具有 project.godot
文件的典型项目导入。
独立的 2D 和 3D 引擎Godot explained in 5 minutes
Godot 提供专用的 2D 和 3D 渲染引擎。因此,2D 场景的基本单位是像素。即使引擎是分开的,您也可以在 3D 中渲染 2D,在 2D 中渲染 3D,并在 3D 世界上叠加 2D 精灵和界面。