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

Archives Details

Godot 4 & Rust 始め方

Rust

2025.06.19

この記事は最終更新日から1年以上が経過しています。

どもです!
専ら、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

ゲーム開発に必要な基本数学入門

2025.08.15

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

CATEGORY LIST

LATEST NEWS

ラズパイが高騰しているのでストレス解消のためAliExpressで購入した電子パーツ達

電子工作

2026.08.02

【2026】【VMware Fusion】MacでWindowsを無料で扱う。

windows

2026.07.19

Raspberry Pi 5 でマインクラフトサーバーを立てる(Java版 × 統合版クロスプレイ対応)

RaspberryPi

2026.06.24

ラズパイが高い。

RaspberryPi

2026.05.26

【Claude Code】フル稼働。ToDo Appを様々なGUIフレームワーク用いて作らせる。

AI・Bot・algorithm

2026.05.24

Macで歩く「たのしいバイナリの歩き方」うさみみハリケーンの代わりに、Cheat Engine / Bit slicerを使用する

アセンブラ

2026.04.12

Macで歩く「たのしいバイナリの歩き方」

アセンブラ

2026.04.10

【Railway】ひたすら安く個人開発サービスを運用する計画

サーバー

2026.04.06

たびのきろく

イベント

2026.02.23

【Railway】MySQLサービスをコスト抑えて運用する

運用

2026.01.19

あけましておめでとうございますmm DjangoアプリをRailwayに移行する。

運用

2026.01.06

効率の良い AI駆動開発について考える

AI・Bot・algorithm

2025.11.09

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

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

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

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

FOLLOW US