2020-11-12

[Aaria/bevy] Snake2 - AariaToys

ニュース
 Snake2は前作のSnakeの第2弾です。bevy 3.0とそれに応じたSnakeのチュートリアルを参考にコードをいじっていたら前作とは随分と異なる操作感のものになったため、Snakeをアップデートするよりも別のゲームとして公開することにしました。
 AariaToysシリーズはゲームのルール自体を改変しながらおもちゃのブロックで遊ぶように創造的なプレイを楽しむゲームシリーズとなっています。コードでの配布のため、Rustをコンパイルする環境が必要ですが、機会がありましたらぜひ一度プレイしてみてください。
 ゲームの詳細はSnake2のページをご覧ください。

2020-11-11

[Aaria/bevy] Bevy Games

 この度、Rust製ゲームエンジンbevyに関するコードの情報をまとめたbevy_gamesのページを作成しました。bevyを使って書かれたコードへのリンクや、AariaToysシリーズなどのページも用意しています。今後も多くのbevy関連のコードが公開されていくと思われるので、公開ページとしてまとめていくことにしました。

 bevyは現在も開発段階であり、バージョンアップごとに前のバージョンでは動いていたコードが動かなくなるなど、破壊的な改変が今も続いています。
 また、これは予測/目安としての情報なのですが、半年後にはだいたいの機能が安定、1年後にはかなり完成に近づく・・・ような発言がありました(飽くまで目安であって予定ではないのでご注意ください)。

 個人的にAaria.exeによりバージョン3.0用に大きく変更されたCrate bevyの情報は修正したのですが、今後も大きな改変は続くと予測されるので、bevyを使ってゲーム制作の練習をすると同時に、この機会に丁寧にRust自体を学習しなおそうかとも検討しています。

 少し前にbevyの技術的な記事をいくつか書いてはいたのですが、今後も大きく仕様が変更されることを考えると、ほとんど需要0な情報のように感じたので、しばらくbevyに関する技術的な記事は書かない予定でいます。

 Rustは便利なもので、依存するCrateのバージョンさえ古いままにしておけば、そのCrateのバージョンアップによりコードが破壊される事態が起こっても、依存バージョンを維持すれば従来通りコンパイルが通ります。過去記事でbevyは最新バージョンに維持して使う・・・との記述をしましたが、Hashである程度固定するか、公開バージョンに合わせて使っていくほうが混乱が起こりづらく、よいのかも知れません(この前最新バージョンでコードをテストした際、myfunction.system()の部分でエラーが発生しました)。

 半年以内には登場すると思われるエディターに期待しているところですが、それまでにはある程度(最低限のレベルの色々な)ゲーム制作に慣れているのが理想と考えています。今のところ余裕を見てAariaToysシリーズに属する簡単なゲームを作っていけたらとも考えています。

2020-11-05

[bevy] v0.3 リリース

 ここ一ヶ月以上、bevy以外のことに多く時間をとられており、bevy 2.0の公開もここで通知し逃してしまいましたが、先日(11月3日)bevy 0.3がリリースされましたので、今回は通知させていただきたいと思います。

Bevy 0.3のアップデート内容

・Androidサポート:多くの機能を備えてはいるものの、まだ開発段階であり、機能しないものもあります。(インストールexample)
 Androidの静的ライブラリをサポートするbevy-glsl-to-spirvの更新
 タッチのサポート
 テクスチャーフォーマットの修正
 タッチUIの修正
 Androidオーディオサポート 他
・iOSサポート:まだ機能するものとしないものがある段階です。(インストールexample)
 オーディオはまだ完全には機能していません。
・WASM(WebAssembly)アセットの読み込み:HTTP経由でアセット(画像や音楽ファイルなどゲームの素材のようなもの)を取得可能。
 asset_server.load("sprite.png"); // コード例
 まだ完成段階にはありません。
・タッチサポート:Touchesを実装。
・アセットシステムの改善:アセットに参照カウントを実装し、アセットが自動で解放されるようになりました。アセットの読み込みに関しても柔軟性が増しました。
 let handle = asset_server.load("sprite.png"); // これまではResult<Handle<T>, AssetServerError>で結果を返していましたが、シンプルにHandle<T>を返すようになりました。unwrap()が不要になる分、よりコーディングが快適に。
 let second_handle = handle.clone(); // クローンなどを作成することにより、参照カウントが加算(+1)されます。
他にも多数あります。

 一方で削除された項目なども多数あります。(以下に一例)

「load_asset_folder」「load_sync」「AssetLoader.from_bytes」「load_from_file」「get_version」などのメソッド。
「AssetChannel」「AssetInfo」などの構造体。
「AssetLoadRequestHandler」などのトレイト。

 思っていたよりはるかに多くの追加/削除が確認できました。上記はごく一部を抜粋したものに過ぎません。個人的にbevy関連のドキュメントは全て独自にまとめていたのですが(様々な技術情報も詳細に独自に記録していくためにも)、まだまだ発展途上段階にあるBevyの変わりようは、(想定こそしていましたが実際に直面してみると)思っていたよりも不安定で、現時点での技術を常に最新の状態に(個人的に)まとめていくのはかなり非効率的であると感じました。最終的には自分にとっての理想の技術本に仕上げるためにもこの作業(ドキュメントを独自にまとめる作業)は欠かせないとは考えていますが、今は全体像が簡単に把握できる程度にどどめ、Rust自体の学習や、実践的に色々なゲームを作ってみることに集中したほうが良さそうです。

 エディターは半年後くらいに安定したものが出るかも知れない・・・と「予想」できる発言がありました。もちろんどこまでも予想なのですが、今までは「検討もつかない」状態だったので、少し目安になる情報ではと感じています。
 エディターはゲームをより効率的にわかりやすく開発する上で非常に重要なものです。もちろんbevyの場合、これはRustの学習を不要にするものではないのですが、この部分はbevyに対し最も期待している要素の一つでもあります。

bevy需要

 まだまだ(日本では)bevy需要もないようで、当サイトのbevy記事も検索エンジンからは「Rust ゲームエンジン」経由のものがほとんどだったりします。bevyは開発途上の段階であり、ドキュメントもバージョンアップごとに大きく変更を迫られる可能性が大のため、不安定なドキュメントの充実はさけられている状態です。私個人はGoogleでヒットする限りの全てのbevy(GameEngine)の情報にあたり、一通りドキュメントをまとめ、今はDiscordの会話全てに目を通そうとしている段階にありますが、しばらくbevy中心の学習を離れ、一旦Rust自体の学習、あるいは簡単なbevyを使ったゲーム制作練習に取り掛かろうか検討中です(思っていたよりバージョンアップによるbevy自体の仕様変更が大きかったため)。
 今までbevyは関連するbevy_xxxxクレートの検索をbevyから行えなかったため、独自のdbに情報をまとめる効果は大きかったのですが、今回のアップデートでbevyから全要素に対し検索がかけられるようになりました。わりと大掛かりなドキュメント構造の変更のため(今後はここまで大きな変更はあまりないと予測していますが)、この期に再度bevy情報を整理しておこうかとも考えています。
 当サイトでもbevy情報は扱っていこうとは考えていますが、丁寧なドキュメントはbevyのバージョンアップごとに価値がなくなってしまう可能性もあるため、ほどほどにしておきたいとも思っています。恐らく今の段階でbevyをいじってみようと考えている方は英語で直接情報を仕入れようと考えている方が全てだと思うので、当サイトで中途半端な解説情報を載せてもあまり意味もないような気もしてきました。実はこの前に公開したSnakeも公開した後、既に「最新バージョンではコンパイルできない」ことに気づき、コードを修正しようか迷っていました。最新情報を追いながら、安定版に入る頃にはある程度bevyを使いこなせるようになっていたい・・・というのが当面の目標です。