#godot #gd-native #class #engine #bindings #game-engine #methods

gdnative-derive

Godot 游戏引擎的 gdnative derive 和过程宏

15 个版本

0.11.3 2023年1月30日
0.11.0 2022年10月2日
0.10.0 2022年3月19日
0.9.3 2021年2月3日
0.7.0 2019年12月22日

#18#gd-native

Download history 94/week @ 2024-03-13 117/week @ 2024-03-20 115/week @ 2024-03-27 172/week @ 2024-04-03 94/week @ 2024-04-10 91/week @ 2024-04-17 103/week @ 2024-04-24 109/week @ 2024-05-01 91/week @ 2024-05-08 178/week @ 2024-05-15 196/week @ 2024-05-22 100/week @ 2024-05-29 115/week @ 2024-06-05 109/week @ 2024-06-12 112/week @ 2024-06-19 72/week @ 2024-06-26

418 每月下载量
用于 20 个包 (3 直接)

MIT 许可证

170KB
3.5K SLoC

GDNative 的 Rust 绑定

crates.io stable docs master docs book website

godot-rust 是一个 Rust 库,它实现了对 Godot 游戏引擎 的本地绑定。这允许你在 Godot 中开发游戏或其他应用,同时享受 Rust 的优势,如类型系统、可扩展性和性能。

注意:如果你在寻找 GDExtension (Godot 4) 的 Rust 绑定,请查看 gdext

维护策略

gdnative 被认为功能基本完善,并以 API 稳定性为重点进行维护。我们尽量避免不必要的破坏性更改,并在必要时将其对最终用户的影响降至最低。

我们遵守 Cargo 的语义版本控制,作为在版本之间传达公共 API 变化的手段。未来的版本发布计划在 GitHub 上公开,并使用 里程碑 功能。请注意,我们使用 breaking-change 标签来指示任何技术破坏的存在,无论其对最终用户程序的影响预期如何。

如果你打算贡献力量,但又不确定你想要做的事情是否在项目的范围内并且符合我们的维护政策,请在开始之前随时 与项目维护者联系

工具链兼容性

gdnative 当前支持的最小 Rust 版本 (MSRV) 为 1.70。我们使用 Rust 2021 版本。

警告Linux 用户:请注意您 Godot 二进制的来源! 使用基于容器格式的 Godot 二进制发行版可能包含与您从基础系统直接构建的 GDNative 库不兼容的依赖版本。此类格式的示例包括 FlatpakSnapAppImage

截至 2023 年,某些包管理器在请求 Godot 时可能会静默地安装这些版本之一而不是正常包,这可能导致您的 GDNative 库出现奇特的兼容性问题。我们建议使用来自 godotengine.org 的官方二进制文件,用于编辑器和导出模板。

由于 GDNative API 并不严格遵循 SemVer,并且一些概念与 Rust (默认参数) 不完全对应 1:1,因此 godot-rust 版本同时与多个 Godot 版本保持兼容是有困难的。

然而,我们默认支持最新稳定的 Godot 3 次版本,并允许使用 custom-godot 功能标志轻松使用自定义引擎版本(见 下文)。

兼容性列表

  • Godot 3.5.1(与 gdnative 0.11 兼容)
  • Godot 3.4(与 gdnative 0.10 兼容,0.11 的自定义构建)
  • Godot 3.3(自定义构建)
  • Godot 3.2(自定义构建)

绑定不支持 Godot 4。如果您正在寻找 GDExtension(Godot 4)的 Rust 绑定,请查看 gdextension

入门指南

详细设置在 本书的 入门指南 部分 中进行说明。如果遇到问题,还请阅读 常见问题解答(FAQ)

最新发布版本

这是使用 godot-rust 的推荐方式。在安装了 bindgen 依赖和当前 Godot 版本后,将 gdnative crate 添加为依赖项,并将 crate 类型设置为 cdylib

[dependencies]
gdnative = "0.11"

[lib]
crate-type = ["cdylib"]

最新 GitHub 版本

如果您想从最前沿的功能和错误修复中获益,可以使用 GitHub 版本。我们有一个相对复杂的 CI 和测试套件以提供基本稳定性,但 GitHub 版本通常比 crates.io 发布版本更具实验性,且战斗测试较少。我们也不保证这里的 SemVer 兼容性。

[dependencies]
gdnative = { git = "https://github.com/godot-rust/godot-rust.git" }

[lib]
crate-type = ["cdylib"]

自定义构建

要使用与其他 Godot 版本或引擎的自定义构建一起使用的绑定,请参阅用户指南中的 自定义 Godot 构建

异步/yield 支持

异步支持是一个进行中的工作,如果启用了 async 功能,则 gdnative::tasks 中有一个低级 API 可用。有关如何使用 Tokio 使用异步功能介绍,请参阅本书中的 此页

示例

一个典型的用例是公开您自己的 Native Class,这是一个可以从 Godot 引擎调用的 Rust API。生成的原生脚本可以附加到场景树中,就像 GDScript(.gd 文件)一样。

这通过动态库和 GDNative 接口 实现,该接口将由 Godot 加载。必要的连接由 godot-rust 在幕后完成。一个简单的 "Hello world" 应用程序可能如下所示

use gdnative::prelude::*;

#[derive(NativeClass)]
#[inherit(Node)]
pub struct HelloWorld;

#[methods]
impl HelloWorld {
    fn new(_base: &Node) -> Self {
        HelloWorld
    }

    #[method]
    fn _ready(&self, #[base] _base: &Node) {
        godot_print!("Hello, world.");
    }
}

fn init(handle: InitHandle) {
    handle.add_class::<HelloWorld>();
}

godot_init!(init);

更多示例

重要说明

要运行或编辑示例,您首先需要为其构建本地库。否则,项目将损坏。您可以通过以下命令手动构建:cargo build,或者使用方便的shell脚本example.sh./example.sh run hello-world./example.sh edit hello-world以使用编辑器。

“/examples”目录包含几个可用的示例,包括Godot项目和Cargo的编译设置,便于编译。

启动时,Godot编辑器会尝试加载项目中使用的所有资源,包括本地库。如果后者不存在,编辑器将跳过场景中与丢失的本地脚本关联的属性或信号。这会导致依赖于编辑器中配置的属性或信号的任何示例的场景树无法使用。

第三方项目

要查看在godot-rust之上开发的游戏和集成的列表,请参阅书中第三方项目

贡献

查看贡献指南

许可

您提交的任何贡献,如要包括在本作品中,都应按照MIT许可证许可,无任何附加条款或条件。

依赖项

~3.5MB
~75K SLoC