脚本语言

本课将向你介绍 Godot 中可用的脚本语言。你将了解每个选项的优点和缺点。在下一部分,你将使用 GDScript 编写你的第一个脚本。

脚本附加到节点并扩展其行为。这意味着脚本继承所附加节点的全部函数和属性。

例如,以一个 Camera2D 节点跟随一艘船的游戏为例。Camera2D 节点默认跟随其父节点。想象一下,当玩家受到伤害时,你希望相机震动。由于此功能未内置在 Godot 中,因此你可以在该 Camera2D 节点上附加脚本并对抖动进行编程。

../../_images/scripting_camera_shake.gif

可用的脚本语言

Godot 提供了四种游戏编程语言:GDScript、C# 以及通过 GDExtension 技术提供的 C 和 C++。还有更多社区支持的语言,但这四个是官方所支持的语言。

你可以在一个项目中使用多种语言。例如,在团队中,你可以在 GDScript 中编写游戏逻辑,编写起来很快,然后使用 C# 或 C++ 来实现复杂的算法,最大限度地提高其性能。你也可以使用 GDScript 或 C# 来编写所有内容。这些都由你自己决定。

我们提供这种灵活性以满足不同游戏项目和开发者的需求。

我应该使用哪种语言?

如果你是初学者,我们推荐从 GDScript 入手。这门语言是我们针对 Godot 和游戏开发者的需求制作的。语法简单直白,与 Godot 结合得最为紧密。

../../_images/scripting_gdscript.png

使用 C# 时,你需要使用 VSCode 或 Visual Studio 等外部编辑器。虽然对 C# 支持目前已经成熟,但相对 GDScript 而言,能找到的学习资源会相对较少。因此,我们主要推荐已经熟悉 C# 语言的用户去使用 C#。

我们来看看各个语言的特性以及其优缺点。

GDScript

GDScript 是一门面向对象指令式编程语言,专为 Godot 构建,是游戏开发者为游戏开发所制作的,目的是节省编写游戏代码的时间。其特性包括:

  • 简洁的语法,让文件更轻量。

  • 极快的编译与加载速度。

  • 与编辑器紧密集成,包括节点、信号以及脚本所挂载场景的更多信息等元素的代码补全。

  • 内置向量与变换类型,让海量线性代数计算更高效,游戏必备。

  • 支持多线程,与静态类型语言的一样高效。

  • 没有垃圾回收),因为垃圾回收最终会影响游戏的开发。引擎会默认进行引用计数,在大多数情况下为你管理内存,但你也可以在需要时自行控制内存。

  • 渐进类型。变量默认是动态类型,但你也可以使用类型提示来做强类型检查。

GDScript 用缩进来做代码块结构,看上去像 Python,然而实际上这两者的原理截然不同。GDScript 的设计灵感是从 Squirrel、Lua、Python 等诸多语言中得到的。

备注

我们为什么不直接使用 Python 或者 Lua?

很多年前,Godot 曾使用过 Python,后来也用过 Lua。做这两个语言对 Godot 的集成花费了大量精力,而且还存在局限性。例如,在 Python 中做多线程支持是个非常巨大的挑战。

开发专属语言不会花费更多的时间,我们还能针对游戏开发者的需求去量体裁衣。我们现在在做性能优化工作,也在实现用第三方语言难以实现的特性。

.NET / C

微软的 C#) 深受游戏开发者的喜爱,我们对其有官方支持。C# 是一门成熟灵活的语言,拥有海量的库。得益于微软慷慨大方的捐助,才让 Godot 对 C# 的支持成为可能。

../../_images/scripting_csharp.png

虽然 C# 在性能和易用性之间进行了良好的平衡,但你也要注意一下其垃圾回收机制。

备注

你必须使用 .NET版本的 Godot 编辑器才能在项目中使用 C# 进行编程,可以在 Godot 网站的下载页面进行下载。

Godot 使用 .NET 6,理论上任何第三方 .NET 库或框架都可用于编写 Godot 脚本,包括任何符合通用语言标准架构的语言,如 F#、Boo、ClojureCLR等。然而,C# 是唯一官方支持的 .NET 语言选项。

备注

GDScript 代码本身执行起来并没有 C# 或 C++ 等编译型语言快,而大多数脚本代码又都是在调用 Godot 引擎的 C++ 代码中的快速算法。在大多数情况下,使用 GDScript、C#、C++ 编写游戏逻辑并不会呈现出明显的的性能差异。

注意

在 Godot 4 中用 C# 编写的项目目前无法导出到 Web 平台。如果要在该平台上使用 C#,请考虑使用 Godot 3。 (C# 的)Android 和 iOS 平台支持从 Godot 4.2 开始提供,但仍处于实验阶段,并且 存在一些限制

参见

要了解更多关于 C# 的信息,请前往 C# 基础页面。

通过 GDExtension 使用 C++

GDExtension 能够让你使用 C++ 编写游戏代码,无需重新编译 Godot。

../../_images/scripting_cpp.png

我们在内部使用 C API 进行桥接,得益于此,你可以使用任意版本的该语言,也可以混用由不同厂牌、不同版本的编译器所生成的共享库。

如果要图性能,那么 GDExtension 便是最佳选择,不需要在整个游戏中都用到。这样,你仍可以用 GDScript 或 C# 来编写其他部分。

使用 GDExtension 时,其可用的类型、函数和属性与 Godot 实际的 C++ API 高度相似。

总结

脚本可附加到节点,是扩展该节点功能的代码文件。

Godot 支持四种官方脚本语言,在性能和易用性之间为你提供灵活的选择。

你可以混合使用语言,例如,用 C 或 C++ 来实现高要求算法,用 GDScript 或 C# 来编写大部分游戏逻辑。