Godot的设计理念

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

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

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

如果您正在寻找引擎特性的概述, 请观看 探索免费游戏引擎Godot 3 .

面向对象的设计与组合

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

首先,Godot可以让您 组合或聚合 场景. 就像嵌套的预制件一样: 您可以创建BlinkingLight场景, 并创建使用BlinkingLight的BrokenLantern场景. 然后, 创建一个充满BrokenLanterns的城市. 更改BlinkingLight的颜色, 保存, 城市中的所有BrokenLantern都会立即更新.

最重要的是, 您可以从任何场景 继承 .

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

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

image0

另外,Godot提供了不同类型的节点(Node)对象, 每种节点都有特定的用途. 节点是场景树的一部分, 并且最终继承自 Node 类. 尽管引擎确实具有碰撞形状之类的组件, 但它们是例外(并非Node, 属于Resource).

image1

SpriteNode2D,``CanvasItem`` 和 Node 类型. 它具有三个父类的所有属性和特性, 比如 transforms 或者绘制自定义形状和渲染自定义着色的能力.

完善的工具集

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

image2

我们的目标是提供一个完整的软件包来创建游戏以及持续的用户体验. 您仍然可以和外部程序一起工作, 只要有一个导入插件做支持. 或者您可以自己创建一个, 比如 Tiled Map 导入器 .

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

GDscript使您可以使用类似Python的语法编写简单的代码, 但是它可以检测类型并提供静态语言的自动补全特质. 它还针对具有内置类型(如 VectorsColors )的游戏代码进行了优化.

请注意, 使用GDNative, 您可以编写出使用类似C, C++, Rust或Python(使用Cython编译器)这类的编译语言编写的高性能代码, 而无需重新编译引擎.

image3

VisualScript是一种基于节点的编程语言, 可以很好地集成到编辑器中. 您可以将节点或资源拖放到图中以创建新的代码块.

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

image4

Godube 2中的状态机编辑器插件, 由kubecz3k开发. 它使您可以直观地管理状态和转换.

开源

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

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

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

注解

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

社区驱动

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

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

Godot编辑器是一个Godot游戏

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

由于它为编辑器本身提供了动力, 因此这导致了可靠且灵活的UI系统. 使用 `` tool`` 关键字, 您可以在编辑器中运行任何游戏代码.

image5

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

tool 关键字放在任何GDScript文件的顶部, 它将在编辑器中运行. 这使您可以导入和导出插件, 创建自定义级别编辑器之类的插件, 或使用与项目中使用的相同的节点和API来创建脚本.

独立的2D和3D引擎

Godot提供专门的2D和3D渲染引擎. 因此, 2D场景的基本单位是像素. 即使引擎是分开的, 您可以在3D渲染2D, 在2D渲染3D, 并在您的3D世界叠加2D精灵和界面.