SuperAPI AI 工具集

gdextension

编程与开发

查看项目

更新于 10-15 22:40

技能介绍

用途:在 Godot 中以共享库形式运行原生 C++(或 Rust)代码,无需重新编译引擎。适用于性能关键代码、封装现有 C/C++ 库或构建语言绑定。与编译进引擎的 C++ 模块不同,GDExtension 运行于官方 Godot 之上,只需分发共享库;但它比 GDScript 和 C# 更复杂,不应默认使用。

主要能力:通过 GDCLASS、ClassDB::bind_method、ADD_PROPERTY、ADD_SIGNAL 将原生类、方法、属性与信号暴露给 GDScript/C# 和编辑器;属性范围提示可转为 Inspector 滑块。入口点用 GDREGISTER_CLASS 注册类,并以 MODULE_INITIALIZATION_LEVEL_SCENE 为门槛。.gdextension 文件配置 entry_symbol、compatibility_minimum、reloadable 及按平台/架构区分的 [libraries] 路径,可选 [icons] 与 [dependencies]。

使用方式:创建项目并添加与目标引擎版本匹配的 godot-cpp 分支子模块,例如 git submodule add -b 4.3 https://github.com/godotengine/godot-cpp,随后 git submodule update --init。用 scons platform=<platform> 构建(省略平台则针对当前平台,默认 debug)。导出的 extern "C" 符号名必须与 entry_symbol 一致,否则扩展无法加载。构建后原生类会作为普通节点类型出现,可在 GDScript 中用 GDExample.new()、属性赋值与信号连接使用,C# 中可通过动态 Set/Connect/Call 使用。

适用场景:热循环中的原生速度、直接调用 C/C++ 库、构建语言绑定。

限制:兼容性只向前不向后,目标 4.3 的扩展无法在 4.2 加载;godot-cpp 分支须匹配引擎版本;reloadable 热重载仅 debug 构建可用;导出游戏需包含匹配的 template_release 二进制。Godot 4.7 起内置文本服务器不能再作为 GDExtension 构建,object_cast_to 与 classdb_get_class_tag 已弃用,Object.is_class() 参数类型由 String 改为 StringName。