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

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

相关推荐
一次旅行6 小时前
【AI工具】Rust-Based CLI:用 xargs 和并行加速你的 Linux 日常
linux·开发语言·rust
_ZHOURUI_H_8 小时前
MyFramework: 同样是 Unity 游戏开发框架,和 HTFramework 的设计取向有什么不同?(下)
unity·游戏引擎·游戏开发·游戏ui·手游开发
梦醒沉醉10 小时前
6、Rust程序设计语言——包、crates与模块
rust
KillJUMP10 小时前
SDF函数
godot·着色器
花褪残红青杏小11 小时前
Rust图像处理第16节-曼德博集合 Mandelbrot:用一行公式画出无限细节
rust·webassembly·图形学
Arman376811 小时前
rusty-cat × 阿里云 OSS 直传直下实战
rust·ai编程
临风细雨13 小时前
从 Bun 的 Rust 重写,看 C# 如何重建 AI 基础设施层
人工智能·rust·c#
x-cmd13 小时前
Linus 9 年前说「模糊测试有效」——今天已成 OSS-Fuzz 时代铁律
linux·ai·rust·开源·自动化·agent·安全性测试
CodeForWater14 小时前
RUST设置临时环境变量在PowerShell
rust
独孤留白15 小时前
从C到Rust:Trait Deref + DerefMut 智能指针与自动解引用
rust