GDNative 是什么?
前言
GDNative 是 Godot 专有的技术,可以让引擎在运行时与原生共享库交互。你可以通过它来执行原生代码,无需和引擎一同编译。
备注
GDNative 不是脚本语言,与 GDScript 无关。
GDNative 与 C++ 模块的区别
GDNative 和 C++ 模块都可以用于在 Godot 项目中执行 C 或 C++ 代码。
它们都可以用来将第三方库集成进 Godot。选用哪一个取决于你的需求。
GDNative 的优势
与模块不同,GDNative 不需要编译引擎的源码,可以使你的作品更易于分发。它可以让你访问 GDScript、C# 使用的大多数 API,让你在编写游戏逻辑时能够完全控制性能。这是你在素材库中以插件形式分发高性能代码的理想选择。
并且:
GDNative 并不仅限于 C 和 C++。得益于第三方绑定,你也可以在很多其他语言中使用。
你可以在编辑器和导出项目中使用相同的编译后的 GDNative 库。而对于 C++ 模块,如果你想在运行时使用相关功能,就必须重新编译所有想要使用的导出模板。
GDNative 只需编译你自己的库,而不是整个引擎。C++ 模块则与此不同,是会静态编译进引擎的。每修改一次模块,你就需要重新编译一次引擎。即使使用增量构建,这一过程也比 GDNative 要慢。
C++ 模块的优势
如果 GDNative 无法满足要求,我们推荐使用 C++ 模块:
C++ 模块与引擎的集成更加紧密。GDNative 仅限于访问脚本所暴露的 API。
使用 C++ 模块为项目提供额外功能,就可以免去携带原生库文件的麻烦。同样也适用于导出的项目。
所有平台都支持 C++ 模块。而 HTML5 只对 GDNative 进行了有限的支持(无法使用多线程),通用 Windows 平台(UWP)则尚不支持 GDNative。
C++ 模块比 GDNative 要快,尤其是在代码需要通过脚本 API 做大量通信的情况下。
支持的语言
Godot 开发者官方支持以下 GDNative 语言绑定:
备注
没有官方支持更多 GDNative 语言的计划。不过社区提供了不少其他语言的绑定(见下文)。
以下绑定是由社区开发并维护的:
备注
这里列出的绑定并不都能用于生产。请在新项目中使用前先做足调查。同时,请确定该绑定与你所使用的 Godot 版本兼容。
版本兼容性
与 Godot 本身不同,GDNative 对版本兼容性的要求更严格,因为它依赖于底层的 ptrcall 来调用函数。
为特定版本 Godot 编译的 GDNative 插件只保证能够在相同次要版本上可用。例如,为 Godot 3.4 版本编译的 GDNative 插件只能用于 Godot 3.4、3.4.1、3.4.2……无法用于 Godot 3.3 或 3.5。