在Godot游戏引擎中使用不同的编程语言?

7

我希望能将不同的编程语言与Godot游戏引擎绑定起来。是否有关于此主题的指导文档或视频?例如,如何完成这个项目:godot-rust。如果我可以学习基础知识,我就能成功地使用不同的语言进行工作。谢谢。

2个回答

5
在本回答中,我将向您展示在Godot 3.x中添加语言支持的不同方法(在Godot 4.0和GDExtension中情况会有所不同-它取代了GDNative并希望减少自定义构建),并提到一些由每种方法支持的语言。但是,这不是所有语言的详尽列表。
首先,Godot对GDScript和VisualScript(以及其可视化对应项和着色语言)具有官方内置支持。
有几种使用C ++的方法:
您可以使用它创建GDNative脚本(这基本上是围绕本地调用的包装器,允许您将它们作为脚本在Godot中使用)。
或者您可以创建模块(这是您可以在自定义Godot构建中添加的静态库)。
由于Godot源代码是C ++,因此如果您正在制作自定义构建,则不必限制自己只制作模块。
在Web构建中,Godot可以通过JavaScript类与JavaScript进行接口。但是,此方法不允许您将JavaScript脚本添加到节点等。
然后,还有一些只能在Godot的自定义构建中添加的语言,这是目前官方支持的C#。
还有其他非官方的自定义构建,它们提供了对诸如Lua、Kotlin、TypeScript和JavaScript等语言的语言绑定(这一次允许您制作脚本)。
如果您需要添加运行时,则可能会使用此方法。
有些语言利用Godot的官方Mono支持来支持C#。这样,例如,您可以使用F#和Clojure。
它们从添加C#项目开始,然后修改它以使用另一种语言。如果您的语言已经编译为.NET,则此方法可行。
一些其他语言可以作为实现PluginScript类的插件通过GDNative添加。这是Python和Lua(再次)的情况,您可以从资产库中获取它们。
这是向Godot添加语言支持的最用户友好的方式,但它受到您可以使用PluginScript做什么的限制。

补充说明:之前提到的Lua绑定的作者Gil Barbosa Reis在存储库中有一系列关于其实现的文章(用英语和葡萄牙语编写):godot-lua-pluginscript/extras/articles/。这可能是迄今为止最全面的教程。


其他语言是通过利用GDNative添加的(它们基本上模仿您使用C++所做的操作)。这是Nim、Rust、D、Haskell、Go、Swift等语言的情况。

这就是godot-rust的工作方式:使用rust创建本地库,然后使用godot-rust将它们添加,就像它们是用C++创建的一样。对于任何已经有制作本地库手段的语言来说,这都是一个不错的选择。


最后还有另一种添加语言支持的方法:从该语言到GDScript的转译器,可以使用一个可能也用GDScript编写的插件自动化此过程。这是Lisp的情况。

这种方法主要用于特定领域的语言。


非常感谢您的回答。例如,当我想将 Rust 语言绑定到 Godot 游戏引擎时,我应该如何进行?您能为我制作一个示例吗?它不一定是 Rust 语言。也可以是 Python、Ruby、Dart、Go。 - mrParabol
1
@mrParabol 我认为最好的方法是按照官方文档制作GDNative库:https://docs.godotengine.org/en/stable/tutorials/scripting/gdnative/what_is_gdnative.html。你可以通过这种方式实现`PluginScript`,或将其转换为Godot模块,或者熟悉GDNative后以后可以在其他语言中做同样的事情。此外,熟悉`EditorPlugin`(与GDScript插件相同)可能会有所帮助。至于参考资料,您可以查看其他语言绑定的一些内容,请参见https://github.com/Vivraan/godot-lang-support/。 - Theraot
谢谢。我通过阅读文档学会了如何制作插件,但我仍然找不到绑定新语言的示例。在我学会之前,我想就不会有未添加的语言了 :) - mrParabol
@mrParabol 请查看附录。 - Theraot

1

官方文档在这里提供了您的答案:

Godot官方支持GDScript、C/C++、C#。

可以使用的一些第三方语言包括:Rust、D、Python、Nim和Go。


2
他们如何添加(绑定)第三方语言?例如,我如何将Crystal语言绑定到Godot游戏引擎? - mrParabol
2
你可以在这里使用这个模块:https://github.com/kalinon/godot-crystal。 这个模块的绑定使用了一个专门为 C++ 设计的绑定生成器,而这正是 Godot 开箱即用支持的内容。 - Ethan J
1
非常感谢您的回答。我的目标不是使用它,而是学习如何做到这一点。在这个项目中我应该遵循什么方法?它是如何完成的,您能给一个例子吗? - mrParabol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接