godot-rust 第一个程序
第一章 项目结构图

第二章 准备 rust
第01节 新建 rust
进入到 project-dir 文件夹中,打开终端,使用下面的命令,构建 rust 工程
cargo new myrust --lib
说明:
其中的
myrust可以替换为其他 符合命名规范的名称,表示的是 rust 所在的文件夹名称
第02节 修改 cargo 文件
进入到 下面的目录中 project-dir\\myrust 的文件夹当中,找到 Cargo.toml 文件,修改其内容
ini
[package]
name = "myrust" # rust 所在的文件夹名称, 因为我的名称是 myrust 所以写的是 myrust
version = "0.1.0" # 当前编辑的版本
edition = "2021"
[lib]
crate-type = ["cdylib"] # 这里是必须添加的一句话, 创建一个动态库,并在其中公开一个 C 语言接口
[dependencies]
godot = "0.4.5"
第03节 添加godot到项目中
在终端中,使用下面的命令,将 godot 关联到 rust 当中
cargo add godot
第三章 编译迭代(非必须)
第01节 编译
在编写代码时,您可以cargo像处理任何其他 Rust 项目一样,编译扩展程序的每次迭代
cargo build
第02节 迭代
可以直接在 [dependencies]Cargo.toml 文件的相应部分链接到 GitHub 代码库。为此,请替换以下内容
原始的写法是
godot = "0.x.y"
替换的写法是
godot = { git = "https://github.com/godot-rust/gdext", branch = "master" }
第四章 准备 godot
第01节 gdextension 文件
在 godot 的根目录下面定义 gdextension 文件,例如 文件名称是 HelloWorld.gdextension
需要注意的是 文件的后缀是 gdextension
下面是 文件的内容
ini
[configuration]
entry_symbol = "gdext_rust_init"
compatibility_minimum = 4.1
reloadable = true
[libraries]
linux.debug.x86_64 = "res://../myrust/target/debug/libmyrust.so"
linux.release.x86_64 = "res://../myrust/target/release/libmyrust.so"
windows.debug.x86_64 = "res://../myrust/target/debug/myrust.dll"
windows.release.x86_64 = "res://../myrust/target/release/myrust.dll"
macos.debug = "res://../myrust/target/debug/libmyrust.dylib"
macos.release = "res://../myrust/target/release/libmyrust.dylib"
macos.debug.arm64 = "res://../myrust/target/debug/libmyrust.dylib"
macos.release.arm64 = "res://../myrust/target/release/libmyrust.dylib"
说明:
在 libraries 当中的参数值,其实是 rust 构建生成的资源的路径。
例如
res://../myrust/target/debug/myrust.dll1、前面的第一个 myrust 是 rust 所在的根文件夹名称
2、后面的 myrust.dll 是由于我们定义了 rust 的根文件夹名称,生成出来的 myrust.dll
第02节 检查映射文件
如果前面的操作正确的情况下,这是一个非必须的操作。
我们可以查看 godot 当中,下面路径文件夹里面的内容:
路径: project_dir\\godot\\.godot\\extension_list.cfg 当中的文件 extendsion_list.cfg 的内容
正确的内容,应该是指向了 外面的 HelloWorld.gdextension
例如:
ini
res://HelloWorld.gdextension
第五章 编写第一个程序
前面的内容都是为了准备 godot 和 rust 的操作,下面则可以开始编写第一个程序代码了。
第01节 修改lib.rs 文件内容
在路径 project_dir\\myrust\\src\\lib.rs 当中,替换 lib.rs 内部的内容
rust
use godot::prelude::*;
struct MyExtension;
#[gdextension]
unsafe impl ExtensionLibrary for MyExtension {
}
mod player;
针对于上述的内容,进行解释说明:

第02节 定义 Player.rs 文件
在路径 project_dir\\myrust\\src\\ 当中,定义 Player.rs 文件
文件内容如下:
rust
use godot::prelude::*;
use godot::classes::Sprite2D;
use godot::classes::ISprite2D;
#[derive(GodotClass)]
#[class(base=Sprite2D)]
pub struct Player {
speed: f64,
angular_speed: f64,
base: Base<Sprite2D>,
}
#[godot_api]
impl ISprite2D for Player {
fn init(base: Base<Sprite2D>) -> Self {
godot_print!("Hello, world!");
Self {
speed: 400.0,
angular_speed: std::f64::consts::PI,
base,
}
}
fn physics_process(&mut self, delta: f64) {
let radians = (self.angular_speed * delta) as f32;
self.base_mut().rotate(radians);
}
}
针对于上述的内容,进行解释说明:

第03节 编译 rust
编写完毕 rust 代码之后,可以采用下面的命令,编译 rust,生成需要的库。
cargo build
编译完毕,如果正确的情况下,将会在 下面的路径中生成需要的库。
project_dir\myrust\target\debug
生成一些包含有 dll 的一些文件
第04节 在 godot 当中使用
我们可以在 godot 当中,定义一个场景,节点类型就可以选择刚刚定义的 rust 结构体中的 Player 了

在 godot 当中的结构

运行的效果,就是 godot 默认的 icon 在进行旋转了。并且在控制台输出了 Hello, world!
第05节 参考资料
文章参考资料,来自于 The godot-rust book
https://godot-rust.github.io/book/intro/hello-world.html
对其中部分内容,进行了修改