Godot 的设计理念
Now that you’ve gotten your feet wet, let’s talk about Godot’s design.
每个游戏引擎都不同, 以满足不同的需求. 它们不仅提供一系列功能, 而且每个引擎的设计都是独一无二的. 这将导致不同工作流程和项目组织结构. 这一切都源于它们各自的设计理念.
这个页面是为了帮助你通过godot的一些核心功能来理解它的工作原理. 这个页面既不是godot特性的介绍列表, 也不会对各个引擎做比较. 要知道哪一种引擎更适合你的项目, 你需要自己尝试一下并了解各个引擎对设计和局限性.
Please watch Godot explained in 5 minutes if you’re looking for an overview of the engine’s features.
面向对象的设计与组合
Godot凭借其灵活的场景系统和节点层次结构, 将面向对象设计作为其核心. 它试图远离严格的编程模式, 以提供直观的方式来构建游戏.
首先,Godot可以让你 组合或聚合 场景. 就像嵌套的预制件一样: 你可以创建BlinkingLight场景, 并创建使用BlinkingLight的BrokenLantern场景. 然后, 创建一个充满BrokenLanterns的城市. 更改BlinkingLight的颜色, 保存, 城市中的所有BrokenLantern都会立即更新.
最重要的是, 你可以从任何场景 继承 .
一个 Godot 场景可以是武器、角色、物品、门、关卡、关卡的一部分……任何你能想象的东西。它就像类一样,但也可以使用编辑器,纯代码或同时使用两者来编辑场景。
和其他几个3D引擎的Prefab(预制体)不同, 场景可以通过继承来扩展. 你可以创建一个 Magician(魔术师)
来扩展您的 Character(角色)
. 在编辑器中修改 Character(角色)
(例如添加跳跃功能), Magician(魔术师)
也会更新. 这样设计可以帮你保持项目结构与设计的一致性.
Also note that Godot offers many different types of objects called nodes, each with a specific purpose. Nodes are part of a tree and always inherit from their parents up to the Node class. Although the engine does feature some nodes like collision shapes that a parent physics body will use, most nodes work independently from one another.
In other words, Godot’s nodes do not work like components in some other game engines.
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编辑器, 着色器编辑器, 调试器, 分析器, 能够在本地和远程等设备上热重载的功能.
我们的目标是提供一个完整的软件包来创建游戏以及持续的用户体验. 你仍然可以和外部程序一起工作, 只要有一个导入插件做支持. 或者你可以自己创建一个, 比如 Tiled Map 导入器 .
That is also partly why Godot offers its own programming languages GDScript and VisualScript, along with C#. They’re designed for the needs of game developers and game designers, and they’re tightly integrated in the engine and the editor.
GDScript lets you write code using an indentation-based syntax, yet it detects types and offers a static language’s quality of auto-completion. It is also optimized for gameplay code with built-in types like Vectors and Colors.
请注意, 使用GDNative, 你可以编写出使用类似C, C++, Rust或Python(使用Cython编译器)这类的编译语言编写的高性能代码, 而无需重新编译引擎.
VisualScript是一种基于节点的编程语言, 可以很好地集成到编辑器中. 你可以将节点或资源拖放到图中以创建新的代码块.
还请注意,3D工作区不像2D工作区那样有那么多工具. 你将需要使用外部的程序或插件来编辑地形, 给复杂的角色模型制作动画等.Godot提供了完整的API, 可以直接使用编写游戏的代码来扩展编辑器的功能. 参见下面的 The Godot editor is a Godot game Godot编辑器是一个Godot游戏.
Godot 2 的状态机编辑器插件,由 kubecz3k 开发。它使您可以直观地管理状态和转换。
开源
Godot 源代码采用了 MIT 许可证。这意味着它附带的所有技术也必须是自由的(自由使用、修改等)。大部分代码都是由贡献者从头开始开发的。
任何人都可以根据各自需求添加专有软件——当然它们是不会通过引擎一起提供. 包括Google AdMob或FMOD等, 如果需要可以作为第三方插件来提供.
另一方面,开放源代码意味着你可以学习并扩展引擎。你也可以很容易地调试游戏,因为 Godot 会使用堆栈跟踪打印所有错误,即使这些错误来自引擎本身。
注解
开放源码的协议不会以任何方式影响您用Godot所创作的作品 : 不会有附加条件影响Godot引擎与您用Godot制作的东西.
社区驱动
Godot开发自社区, 为其社区内外所有游戏开发者创造的. 由用户需求及公开讨论驱动核心更新. 核心开发人员的新功能通常将重点放在首先让大多数用户受益的方面.
就是说, 尽管只有少数全职的核心开发者, 但在撰写本文时, 该项目已有超过600位贡献者. 仁慈的程序员致力于完善他们可能需要的功能, 因此在每个主要版本中都能看到引擎各个方面的改进.
Godot 编辑器是 Godot 游戏
Godot编辑器在游戏引擎基础上运行. 它使用引擎自己的UI系统, 可以在测试项目时热重载代码和场景, 也可以在编辑器中运行游戏代码. 这意味着 使用相同的代码 和场景既可以构建游戏, 也可以 构建插件并扩展编辑器。
由于引擎为编辑器本身提供了动力, 因此这成就了可靠且灵活的UI系统. 使用 `` tool`` 关键字, 您就可以在编辑器中运行任何游戏代码.
RPG in a Box 是一个用Godot 2制作的RPG体素编辑器. 它使用Godot的UI工具制作了其基于节点的编程系统和界面的其余部分。
将 tool
关键字放在任何GDScript文件的顶部, 它将在编辑器中运行. 这使您可以导入和导出插件, 创建自定义级别编辑器之类的插件, 或使用与项目中使用的相同的节点和API来创建脚本.
注解
The editor is fully written in C++ and is statically compiled into the binary. This means you can’t import it as a typical project that would have a project.godot
file.
独立的 2D 和 3D 引擎
Godot分别提供了独立的2D和3D渲染引擎. 2D场景的基本单位使用的是像素. 即使引擎是分开的, 您依然可以在3D中渲染2D, 在2D中渲染3D, 也能在您的3D世界上叠加2D图片与界面.