このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

Archives Details

Godot 4 & Rust 始め方

Rust

2025.06.19

どもです!
専ら、Tauriから最近はGodotさんです!
Godotは超軽量でしかも気軽に扱える反面、
設計思想からも分かるように、大規模や大人数で扱うようになるとすぐにカオスに破綻しやすい印象でした。
でも、個人開発とか持ってこいのゲームエンジンですね!
どっかどか、治安の悪いソースを生み出していきましょう!!(笑)

会社で使うとなると、かなり考えないとなぁ。。
というところで、とりあえず、Rustと連携するか。。

godot-rustを使おうと思い、実装を始めたのですが、どうもGodot 3の情報など古い情報も混在していていたり、公式ドキュメントもなんか、上手くいかなかったりとフガフガしちゃったので、一旦まとめようかと思います。

Godot 4 で Rust を使う

Godot 4でRustを使うため、godot-rustを使用します。

GitHub

godot-rust

Crate

https://crates.io/crates/godot

まずは、公式ドキュメントのとおり、GodotのプロジェクトとRustのプロジェクトのディレクトリが並列で並ぶ様に、「rust_godot_project」ディレクトリを作成します。

rust_godot_project
├── godot
└── rust

rust_godot_project」ディレクトリ内で cargo newでRust プロジェクト生成。

cargo new --lib rust

Cargo.tomlファイルを以下を追加

[lib]
crate-type = ["cdylib"]

[dependencies]
godot = "0.3.1" 

godotクレートは、gitレポジトリ指定でも

[dependencies]
godot = { git = "https://github.com/godot-rust/gdext.git", branch="master" }

lib.rsを以下に修正します。

mod player;
use godot::prelude::*;

struct RustExtension;

#[gdextension]
unsafe impl ExtensionLibrary for RustExtension {}

odot crate の prelude モジュールをスコープに入れることによって、gdext APIを利用できます。

RustExtensionは任意の名前で、今回「rust」でプロジェクトを生成したので、「RustExtension」としております。

Player.rsを作成します。

use godot::prelude::*;
use godot::classes::{ISprite2D, Sprite2D};

#[derive(GodotClass)]
#[class(base=Sprite2D)]
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);
    }
}

公式ドキュメントをベースにPlayer.rsを作成します。

こちらのPlayer構造をGodotで利用する形となります。

ここまでできたら一旦 cargo buildを行います。

cargo build

この際、rustcが古いとエラーになることがあります。

Rustコンパイラの最低バージョンが rustc 1.87と比較的新しいrustcを要求されますので気をつけましょう。以下のバージョンで更新。

rustup update stable

バージョン確認

rustc --version
rustc 1.87.0 (17067e9ac 2025-05-09)

それでは、Godot側で作業を行います。

Godotでプロジェクト作成

Godotを起動し、godotという名前でプロジェクトを作成します。

プロジェクトパスは先ほど作成した「rust_godot_project」ディレクトリ内となります。

2D シーン押下で、新規2Dシーンを作成。

「Main」にリネームします。

GodotとRust接続のために肝となる「.gdextension」ファイルを「godot」プロジェクトに作成、配置します。

今回は「rust.gdextension」としてファイルを作成します。

rust.gdextension

[configuration]
entry_symbol = "gdext_rust_init"
compatibility_minimum = 4.1
reloadable = true

[libraries]
linux.debug.x86_64 =     "res://../rust/target/debug/librust.so"
linux.release.x86_64 =   "res://../rust/target/release/librust.so"
windows.debug.x86_64 =   "res://../rust/target/debug/rust.dll"
windows.release.x86_64 = "res://../rust/target/release/rust.dll"
macos.debug =            "res://../rust/target/debug/librust.dylib"
macos.release =          "res://../rust/target/release/librust.dylib"
macos.debug.arm64 =      "res://../rust/target/debug/librust.dylib"
macos.release.arm64 =    "res://../rust/target/release/librust.dylib"

[libraries]セクションは、動的 Rust ライブラリのパスと一致するように更新する必要があります。

各プラットフォームに合わせたパスを記述しますが、macだけで良い場合は限定も行えます。

ファイル名は「lib{YourCrate}.dylib」という形になり、今回は「rust」プロジェクトで生成しているので、「librust.dylib」といった形になります。

 

ここまで行えば、先程Rust側で作成した「Player」structをノードとして追加することが可能となります。Mainシーンの子ノードとして Sprite2Dの「Player」ノードを追加します。

ファイルシステムより「icon.svg」をSprite2Dのテクスチャに適応。

大体真ん中あたりに移動させます。

godotをビルドすると、アイコンがくるくる回転します。上手くRustと連携できました。

更にチュートリアルに従って回転させる

更にチュートリアルに従って、アイコンを周回させましょう。

Rustのphysics_processを以下の様に修正します。

fn physics_process(&mut self, delta: f64) {        
    let radians = (self.angular_speed * delta) as f32;
    self.base_mut().rotate(radians);

    let rotation = self.base().get_rotation();
    let velocity = Vector2::UP.rotated(rotation) * self.speed as f32;
    self.base_mut().translate(velocity * delta as f32);
}

修正後、Godotをビルドしてもまだ反映されません。

Rust側の修正の都度ビルドを行わないといけません。

cargo build

再び、Godotをビルドして確認。今回は上手くいきました。

という感じで、Rustを用いてGodotプロジェクト作成も進めて行けそうです。

が、一番行いたいのがWasmと連携で、こちらのクレート(だったかな)も存在するみたいなので調べて行きたいと思います。

業務上扱っていることもあって、今後はGodotに関することを発信していくことが増えそうなので宜しくお願いしますー!

今回のソースはこちらで参照することが可能です。

https://github.com/godot-game-samples/rust-godot-starter

それではぁ。

またまたぁ。

 

 

 

Comment

Related Article

Godot 4 & Rust 始め方

2025.06.19

Rustでつくる ふっかつのじゅもん

2025.04.29

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その5

2025.04.14

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その4

2025.04.10

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その3

2025.04.08

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その2

2025.04.07

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その1

2025.04.05

keyring-rsで、Macのキーチェーンに登録する。

2025.04.04

RustとWebAssemblyによるゲーム開発 Webpack5対応

2025.03.27

Rustで創る MOS 6502 CPU その3 (Cursorと共に)

2025.02.24

CATEGORY LIST

LATEST NEWS

Godot 4 & Rust 始め方

Rust

2025.06.19

ご、ごめん。。今はFlutterの気分じゃないんだ。。

Flutter

2025.05.30

AIのために働け。AI リーダブルコーディングな未来。

AI・Bot・algorithm

2025.05.21

Rustでつくる ふっかつのじゅもん

Rust

2025.04.29

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その5

Rust

2025.04.14

う、動くぞ! Mac mini Apple M4 Pro で PS3ソフトを遊ぶ。RPCS3 Mac版を起動

Game

2025.04.12

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その4

Rust

2025.04.10

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その3

Rust

2025.04.08

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その2

Rust

2025.04.07

時代を先取りし過ぎた ニューラルネットワークが導入されたゲーム『がんばれ森川君2号』を令和に嗜んでみる。

Game

2025.04.06

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その1

Rust

2025.04.05

keyring-rsで、Macのキーチェーンに登録する。

Rust

2025.04.04

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、主に、ゲーム制作中心に港区六本木界隈で活動中。

FOLLOW US