脚本语言

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

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

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

../../_images/scripting_camera_shake.gif

可用的脚本语言

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

您可以在一个项目中使用多种语言。例如,在团队中,您可以在 GDScript 中编写游戏逻辑,因为它编写起来很快,让关卡设计师使用图形语言 VisualScript 编写任务脚本,并使用 C# 或 C++ 来实现复杂的算法并最大限度地提高其性能。或者您可以使用 GDScript 或 C# 编写所有内容。由您决定。

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

我应该使用哪种语言?

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

../../_images/scripting_gdscript.png

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

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

GDScript

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

  • 简单的语法,让文件更短。

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

  • 紧密的编辑器集成,包括节点、信号、所附加场景更多信息的代码补全。

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

  • 支持多线程,与静态类型语言一样高效。这是我们无法轻易通过 Lua、Python 等第三方语言提供的特性。

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

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

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

备注

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

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

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

.NET / C#

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

../../_images/scripting_csharp.png

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

备注

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

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

备注

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

VisualScript

Visual Scripting 是一种基于图的可视化编程语言,你可以将其中的代码块连接起来以进行编程。对于非程序员(如游戏设计人员和艺术家)来说,它可能是一个很好的工具。

../../_images/scripting_visualscript.png

你可以使用其他语言来创建特定于你的游戏的自定义块。例如,为AI、任务或对话编写脚本。这就是 VisualScript 的优势所在。

虽然它提供了编写完整游戏代码所需的所有基本构建块,但我们不建议以这种方式使用 VisualScript。与使用其他编程语言相比,用它来编程所有内容很慢。

参见

更多信息请参阅 VisualScript 入门

通过 GDNative 使用 C 和 C++

GDNative 允许使用 C 或 C++ 编写游戏代码,无需重新编译或重启 Godot。

../../_images/scripting_cpp.png

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

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

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

总结

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

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

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