Aseprite
2Dゲームでは、まず間違いなく画像を表示することになると思います。私はドット絵の作成に Aseprite というツールを使っています。今なら30%オフで1,435円!
実際にドット絵を描いている様子はこんな感じです。フリー/有償含めドット絵のアセットはいろいろ公開されていますが、どうせ足りないものは自分で描くことになりますし、いたずらにクオリティの高いアセットを使ってしまうと自分の下手なドット絵とクオリティにバラつきが出てしまうので、もうぜんぶ自分で描いてしまうことにしました。
ドット絵は生成AI使えば?などと思う人もいるかもですが、生成AIの出力した絵を選別している時間は本当に虚無なので今回は使っていません。それに生成AIで描いた絵を眺めているとなんか自分の頭の中のイメージがそれに汚染されていきますし、クリエイティビティを破壊されてる気がします。大変ではありますが、自分で描いたほうが楽しいですしね。
bevy_aseprite_ultra
Asepriteは最近までUIが日本語に対応していなかったからか日本語圏ではややマイナーですが、世界的には最もメジャーなツールのひとつだと思います。そのためライブラリなどでのサポートされていることが多くて、Bevyではbevy_asepriteやbevy_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のアニメーションの再生もできますが、ぜんぶ説明していたらひとりアドベントカレンダーを完走できないので割愛させて頂きます。