脚本语言

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

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

For example, take a game where a Camera2D node follows a ship. The Camera2D node follows its parent by default. Imagine you want the camera to shake when the player takes damage. As this feature is not built into Godot, you would attach a script to the Camera2D node and code the shake.

../../_images/scripting_camera_shake.gif

可用的脚本语言

Godot offers five gameplay programming languages: GDScript, C#, VisualScript, and, via its GDNative technology, C and C++. There are more community-supported languages, but these are the official ones.

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

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

警告

Godot 4.0 will remove VisualScript from core entirely. As a result, creating new projects using visual scripting in Godot is not recommended. Future Godot 4.x releases may have VisualScript reimplemented as an extension.

While Godot 3.x will keep VisualScript supported, we recommend trying out GDScript instead, especially if you intend to migrate your project to Godot 4.

我应该使用哪种语言?

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

../../_images/scripting_gdscript.png

For C#, you will need an external code editor like VSCode or Visual Studio. While C# support is now mature, you will find fewer learning resources for it compared to GDScript. That's why we recommend C# mainly to users who already have experience with the language.

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

GDScript

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

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

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

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

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

  • Supports multiple threads as efficiently as statically typed languages.

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

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

因为 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

警告

Godot 4.0 will remove VisualScript from core entirely. As a result, creating new projects using visual scripting in Godot is not recommended. Future Godot 4.x releases may have VisualScript reimplemented as an extension.

While Godot 3.x will keep VisualScript supported, we recommend trying out GDScript instead, especially if you intend to migrate your project to Godot 4.

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

../../_images/scripting_visualscript.png

You can use other languages to create custom blocks that are specific to your game, for example, to script AIs, quests, or dialogues. That's where the strength of VisualScript lies.

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

参见

更多信息请参阅 VisualScript 入门

通过 GDNative 使用 C 和 C++

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

../../_images/scripting_cpp.png

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

GDNative is the best choice for performance. You don't need to use it throughout an entire game, as you can write other parts in GDScript, C#, or VisualScript.

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

总结

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

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

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