Work in progress

The content of this page was not yet updated for Godot 4.4 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。做这两个语言对 Godot 的集成花费了大量精力,而且还存在局限性。例如,在 Python 中做多线程支持是个非常巨大的挑战。

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

.NET / C#

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

../../_images/scripting_csharp.png

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

备注

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

Since Godot uses .NET 8, in theory, you can use any third-party .NET library or framework in Godot, as well as any Common Language Infrastructure-compliant programming language, such as F#, Boo, or ClojureCLR. However, C# is the only officially supported .NET option.

备注

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

注意

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

参见

To learn more about C#, head to the C#/.NET section.

通过 GDExtension 使用 C++

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

../../_images/scripting_cpp.png

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

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

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

总结

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

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

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