godot-rust入门案例

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.dll

1、前面的第一个 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

对其中部分内容,进行了修改

相关推荐
大卫小东(Sheldon)8 小时前
Rust 推荐使用宏而非普通函数的场景
rust
doiito8 小时前
【Agent Harness】为什么我把 JSON‑LD “编译成 DAG” 后,整个 Agent 平台立刻聪明了
ai·rust·架构设计·系统设计·ai agent
jump_jump11 小时前
为了重玩金庸群侠传,我研究了一下 Ruffle 怎么复活 Flash
游戏·rust·github
星栈2 天前
Dioxus 多页面怎么做:`dioxus-router`、嵌套路由、`Outlet` 和页面组织,一篇给你讲顺
前端·rust·前端框架
Rust研习社3 天前
组合真的优于继承吗?为什么 Rust 和 Go 都拥抱组合舍弃继承?
后端·rust·编程语言
红尘散仙4 天前
想写一个像样的终端 App?试试把 React 的开发体验搬进 Rust TUI
前端·rust
vivo互联网技术4 天前
从 Web 到桌面:基于 Tauri 2.0 + Vue 3 打造 vivo 线下门店「大头贴」拍照体验系统
前端·rust
Rust研习社4 天前
这 8 个 Rust 学习资源值得每个新手收藏起来
后端·rust·编程语言
星栈5 天前
10 分钟跑起第一个 Dioxus 应用:`dx` CLI、`rsx!` 和热更新好不好用
前端·rust·前端框架
风子115 天前
pong_Day 3:AI 对手球拍 + 计分系统 + 胜负判定
godot