2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🦀ひとりRustとBevyでゲーム開発🕊️Advent Calendar 2024

Day 5

【Rustのまほう2】#5 Asepriteの画像を表示する

Last updated at Posted at 2024-12-04

Aseprite

2Dゲームでは、まず間違いなく画像を表示することになると思います。私はドット絵の作成に Aseprite というツールを使っています。今なら30%オフで1,435円!

実際にドット絵を描いている様子はこんな感じです。フリー/有償含めドット絵のアセットはいろいろ公開されていますが、どうせ足りないものは自分で描くことになりますし、いたずらにクオリティの高いアセットを使ってしまうと自分の下手なドット絵とクオリティにバラつきが出てしまうので、もうぜんぶ自分で描いてしまうことにしました。

スクリーンショット 2024-12-04 001517.png

ドット絵は生成AI使えば?などと思う人もいるかもですが、生成AIの出力した絵を選別している時間は本当に虚無なので今回は使っていません。それに生成AIで描いた絵を眺めているとなんか自分の頭の中のイメージがそれに汚染されていきますし、クリエイティビティを破壊されてる気がします。大変ではありますが、自分で描いたほうが楽しいですしね。

bevy_aseprite_ultra

Asepriteは最近までUIが日本語に対応していなかったからか日本語圏ではややマイナーですが、世界的には最もメジャーなツールのひとつだと思います。そのためライブラリなどでのサポートされていることが多くて、Bevyではbevy_asepritebevy_aseprite_ultraというライブラリ(Rust用語ではcrate)を使えば、いちいちpngにエクスポートしなくても直接Aepriteのプロジェクトファイルを読み込むことができて便利です。私はbevy_aseprite_ultraのほうを使っています。

Asepriteはスライスという機能があって、これを使うと一枚のドット絵に複数のスプライトを含めて同時に編集することができます。bevy_aseprite_ultraはこのスライスの読み込みに対応しています。AseSpriteSliceというコンポーネントにスライス名nameとAsepriteプロジェクトファイルのハンドルaseprite0を渡して生成し、それをcommands.spawnに渡せば、Asepriteの画像が表示されます。簡単ですね。(BevyのAssetServerの機能はまだ説明していないですが、あまり気にしないでください)

fn spawn_demo_static_slice(mut cmd : Commands, server : Res<Assetserver>){
    cmd.spawn((
        AseSpriteSlice {
            name: "ghost_red".into(),
            aseprite: server.load("ball.aseprite"),
        },
    ));
}

上のコードは公式のサンプルコードです。せっかくなので私が実際に書いたコードを紹介しようと思ったのですが、まだ 0.14 のバージョンの古い書き方なのでやめました。また、bevy_aseprite_ultraはAsepriteのアニメーションの再生もできますが、ぜんぶ説明していたらひとりアドベントカレンダーを完走できないので割愛させて頂きます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?