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

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

相关推荐
RPGMZ2 小时前
RPGMakerMZ游戏引擎 地图角色顶部显示称号
javascript·游戏引擎·rpgmz·rpgmakermz
wenlonglanying16 小时前
Windows安装Rust环境(详细教程)
开发语言·windows·rust
Rust研习社17 小时前
Rust + WebAssembly 新手完全入门指南
rust
harrain19 小时前
拟合模型与虚幻引擎
游戏引擎·数字孪生·虚幻
Java水解20 小时前
Rust异步缓存系统的设计与实现
后端·rust
风酥糖20 小时前
Godot游戏练习01-第16节-游戏中的状态机
算法·游戏·godot
Rust研习社1 天前
为什么错误返回在工程实践中要优于异常捕获
rust
Luna-player1 天前
Sass与stylus的区别
rust·sass·stylus
DaLiangChen1 天前
Unity 精准 Mesh 点击检测:穿透遮挡 + 单击双击识别
unity·游戏引擎