Work in progress

The content of this page was not yet updated for Godot 4.2 and may be outdated. If you know how to improve this page or you can confirm that it's up to date, feel free to open a pull request.

脚本语言

本课将向你介绍 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。这两个语言的集成花费了大量精力,并且还存在局限性。例如,在 Python 中做多线程支持是非常大的挑战。

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

.NET / C#

因为微软的 C# 深受游戏开发者的喜爱,我们对其有官方支持。C# 是一门成熟灵活的语言,拥有大量的库。感谢微软大方的捐助,才使得对其的支持成为可能。

../../_images/scripting_csharp.png

C# 在性能和易用性之间提供了不错的权衡,不过你应该了解它的垃圾回收器。

备注

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

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

备注

GDScript 代码本身的执行是没有 C# 或 C++ 等编译型语言快的。然而,大多数脚本代码都是在调用引擎中的 C++ 代码快速算法。在许多情况下,使用 GDScript、C#、C++ 编写游戏逻辑并不会有显著的性能区别。

注意

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

通过 GDExtension 使用 C++

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

../../_images/scripting_cpp.png

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

GDExtension 是性能上的最佳选择。不需要在整个游戏中都使用,因为其他部分你可以用 GDScript 或 C# 编写。

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

总结

脚本是包含附加到节点以扩展其功能的代码文件。

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

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