#godot #native-bindings #async #gd-native #run-time #game-engine #gamedev

gdnative-async

godot-rust的运行时异步支持

9个版本

0.11.3 2023年1月30日
0.11.2 2023年1月8日
0.11.0 2022年10月2日
0.10.2 2022年10月2日
0.0.1-placeholder2021年4月16日

670游戏开发 中排名

Download history 3/week @ 2024-03-07 3/week @ 2024-03-14 15/week @ 2024-03-28 22/week @ 2024-04-04

每月下载量 144
用于 gdnative

MIT 许可证

1.5MB
15K SLoC

GDNative绑定库

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(默认参数)不一一对应,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 使用异步功能的信息,请参阅书籍中的 此页

示例

一个典型的用例是暴露您自己的 本地类,这是一个可以从 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许可进行许可,不附加任何额外条款或条件。


lib.rs:

godot-rust的运行时异步支持。

该crate包含类型和函数,使您能够使用异步代码与godot-rust一起使用。

安全假设

该crate假设所有用户非Rust代码都遵循官方的线程指南。

依赖

~7–15MB
~215K SLoC