一、如何用 C++ 写 Godot 扩展(GDExtension)
基本流程
1. 安装 Godot 引擎(确保有 C++ 头文件)
2. 设置编译环境(SConstruct 或 CMake)
3. 编写 C++ 类并绑定到 Godot
4. 编译为动态库(.dll / .so / .dylib)
5. 在 Godot 项目中加载 .gdextension 配置文件
核心步骤示例
#### 1. 创建 .gdextension 配置文件
[configuration]
entry_symbol = "example_library_init"
compatibility_minimum = "4.3"
[libraries]
windows.debug.x86_64 = "res://bin/windows/debug/libexample.dll"
windows.release.x86_64 = "res://bin/windows/release/libexample.dll"
#### 2. 编写 C++ 类
#include <godot_cpp/classes/ref.hpp>
#include <godot_cpp/core/class_db.hpp>
#include <godot_cpp/godot.hpp>
using namespace godot;
class MyExtension : public RefCounted {
GDCLASS(MyExtension, RefCounted);
protected:
static void _bind_methods() {
ClassDB::bind_method(D_METHOD("hello"), &MyExtension::hello);
}
public:
String hello() {
return "Hello from C++!";
}
};
#### 3. 注册扩展
extern "C" GDExtensionBool example_library_init(
GDExtensionInterfaceGetProcAddress p_get_proc_address,
GDExtensionClassLibraryPtr p_library,
GDExtensionInitialization *r_initialization
) {
// 注册类
ClassDB::register_class<MyExtension>();
return true;
}
---
二、GDScript 插件能否用 C++ 重写?
可以,但需权衡利弊:
| 方面 | GDScript | C++ (GDExtension) |
|---|---|---|
| 性能 | 较慢 | 极快 |
| 编写速度 | 快 | 慢 |
| 调试 | 容易 | 较复杂 |
| 热重载 | 支持 | 需重新编译 |
| 分发 | 直接脚本 | 需编译各平台二进制 |
适合用 C++ 重写的场景
- 性能瓶颈明显的逻辑(物理、寻路、密集计算)
- 需要访问底层 API(OS、渲染、多线程)
- 要封装第三方 C/C++ 库
不适合重写的场景
- 简单工具脚本(Inspector 插件、UI 逻辑)
- 频繁修改的原型代码
- 依赖 Godot 编辑器的
EditorPlugin接口(C++ 也能写,但更复杂)