ゲームの公開
ひとまずでも公開しておかないとなんとなくこの記事シリーズが締まらないので、この記事を読んでくれた人に向けて開発中のゲームをお見せしておきます。ブラウザ版の動作環境は Desktop版Chromeのみ なのでご注意ください。音が出ます。
操作方法はゲーム内の床に書いてあります。ダンジョンの奥にいるボスを討伐すればひとまずゲームクリアっぽい画面が出るようになっていますので、それを目指してみてください。まだまだ開発途中なのですが、私がどんなゲームを作りたいのかくらいは伝わるのではないかと思います。以下は召喚魔法のみでボス討伐ができるかテストをしていて、敵も味方も召喚ばかりで乱戦になった図。
タブキーでインベントリを開き、呪文をインベントリから画面左下の呪文スロットにドラッグアンドドロップすると、スロットの呪文を組み替えられます。いろんな組み合わせを試してみてください。ちゃんと動かなかったらごめんなさい。セーブ機能はまだなくてブラウザをリロードすると最初からになってしまいますので注意してください。
オンラインマルチプレイもあるよ
オンラインマルチプレイも試せるようになっています。最初の拠点からマルチプレイ用のフロアに進むと、他のプレイヤーがいれは相手のキャラクターが見えるはずです1。ブラウザのタブを2つ開いて自分で試すこともできます。私もときどきマルチプレイ用のフロアでキャラクターを動かして開発やテストしているので、タイミングが合えば遭遇するかもしれません。
マルチプレイについてはまだまだまったくテスト不足で、何人くらいまでまともにプレイできるのかもわかってません。また日時を決めてテストプレイに付き合ってくれる人を募集しようかなと思っています。以下は、自分でマルチプレイのテストを試みたものの、手があと二本足りなくてロクなスクリーンショットが撮れなかったときの画像。
アドベントカレンダーを完走した感想ですが
これにて今年のひとりアドベントカレンダーは完結です。Bevyについては書けるTipsがまだ無数にあるんですが、とても書ききれないのでひとまずここまでです。Rust/Bevyでゲームを作ることに興味をもった方がいればぜひやりましょう。
Bevyはまだ新しいエンジンですが、コア部分の完成度は十分でかなり実用性は高いなと思いました。Entity Component Systemは面倒な部分もあるものの、慣れればそれなりに快適に書けます。オブジェクト指向的なフレームワークのほうが良かったかというとそんなこともないです。今回私が作っていたような2Dのゲームであれば、機能不足で困るようなことはあまりないでしょう。あるとしたら、テキストにアウトラインを付ける機能がない、背景にブラーをかける効果が欲しくてbevy_blur_regionsを試してみたのですがデスクトップでしか動かず断念、などの課題が残っています。
Bevyで特に未成熟なのは、UIやオーディオの部分のようです。Reactのように状態と外観を分けて書くのになれていると、BevyビルトインのUI機能はステートフル、古代のGUIプログラミングをしているようなつらいものを感じます。そのためegui、icedなどのUIツールキットが登場していますし、最近では huiというものも登場するなど、まだかなり混戦状態という感じです。オーディオも機能不足で、たとえばBGM切り替え時のボリュームのフェードアウトなんかも必須の処理ですが、そういう機能も自分でコーディングが必要です。そのためbevy_kira_audioというプラグインがよく使われているようです。
Rustにありがちな所有権の問題は、Bevyの設計のおかげなのかほとんど気にならなかったです。ゲーム開発の特性もあって、非同期処理まわりもほとんど意識せずに書くことができたのですが、WebSocket関連のプラグインを作ったときだけがっつりと非同期処理に触れました。Rustの非同期処理はけっこう面食らいました……。Rustはまだ習熟したとは言いづらいですが、やりたいと思ったことはすべて自力で書けている、という感じです。
このゲームの開発はまだまだ続きますので、よかったら応援してやってください。完成したあかつきにはデスクトップ版をSteamで販売できたらいいですね。
-
既知の問題で、たまにマルチプレイを開始しても他の人がまったく見えないことがあります。これはサーバーインスタンスが同時に複数起動し、他の人とは別のサーバーインスタンスに接続してしまっていることが原因のようです。もしその不具合が起きていたら、数分待ってから入り直してみてください。 ↩