🦀

chip1. RustとBevyで"Hello, world!"

に公開

はじめに

2025/04/26時点の内容です。

  • rustc 1.86.0
  • bevy 0.16.0
    bevyは開発初期段階のOSSでまだまだ破壊的なアップデートが入ります。
    でも面白いですよ。

準備

cargo init my_bevy_appで作業フォルダを作りcd my_bevy_appした後cargo add bevyします。

cargoのinitとaddで自動編集されるCargo.tomlはこんな感じになってました。

[package]
name = "my_bevy_app"
version = "0.1.0"
edition = "2024"

[dependencies]
bevy = "0.16.0"

単純な Hello, world!

これだとさすがにつまらない。

use bevy::prelude::*;

fn main() -> AppExit
{   //アプリを生成、Systemを登録、そして実行
    App::new()
        .add_systems( Startup, print_helloworld )
        .run()
}

fn print_helloworld()
{   //標準出力へ
    println!( "Hello, world!" );
}

少し”らしい” Hello, world!

もう少しそれっぽく。

use bevy::prelude::*;

fn main() -> AppExit
{   //アプリを生成、Pluginを登録、Systemを登録、そして実行
    App::new()
        .add_plugins( DefaultPlugins ) //ウインドウやスケジュールの面倒を見てもらう
        .add_systems( Startup, spawn_helloworld )
        .run()
}

fn spawn_helloworld( mut cmds: Commands )
{   //2Dカメラをspawnする
    cmds.spawn( Camera2d );

    //2Dテキストをspawnする
    cmds.spawn
    (   (   Text2d::new( "Hello, world!" ),
            TextFont { font_size: 100.0, ..default() },
        )
    );
}

おまけ:ターミナルへのログ出力の制御

ターミナルに出力されるデバッグログを減らしたい場合、DefaultPluginsに含まれるLogPluginfilterをセットします。
"warn""warn,wgpu_hal=error""error"などと書けます。

use bevy::
{   prelude::*,
    log::LogPlugin, //ログ出力の制御
};

fn main() -> AppExit
{   //ログレベル調整
    let filter = "warn,wgpu_hal=error".into();

    //アプリを生成、Pluginを登録、Systemを登録、そして実行
    App::new()
        .add_plugins( DefaultPlugins.set( LogPlugin { filter, ..default() } ) )
        .add_systems( Startup, spawn_helloworld )
        .run()
}

fn spawn_helloworld( mut cmds: Commands )
{   //2Dカメラをspawnする
    cmds.spawn( Camera2d );

    //2Dテキストをspawnする
    cmds.spawn
    (   (   Text2d::new( "Hello, world!" ),
            TextFont { font_size: 100.0, ..default() },
        )
    );
}

Discussion