#2で bevy-inspector-egui というプラグインを紹介しました。これは Bevy 界隈ではデバッグ用に比較的よくつかわれているツールのようなのですが、Bevyのウィンドウ上に被さるように表示されるため、画面が少々見づらいです。また、bevy-inspector-egui のリストを操作するとウィンドウをクリックしたことになって魔法が発射されてしまうという難点もありました。
それで、先日リリースされた Bevy 0.15 で Bevy Remote Protocolという機能が提供されるようになったのですが、これはBevyアプリケーションに外部から接続してワールドを覗けるという共通プロトコルになっており、これをもとにしたデバッグ用ツールがいくつか新しく登場しているようです。
そこで、今回は最近登場した bevy_remote_inspector というプラグインを試してみます。
bevy_remote_inspector
bevy_remote_inspectorはリモートからBevyアプリケーションに接続できるデバッグツールです。使い方は cargo add bevy_remote_inspector
で依存関係に追加して、app.add_plugins(RemoteInspectorPlugins)
でプラグインを追加するといういつもの手順です。ただし、Bevy Remote Protocolはは外部からの接続を受け入れるものですから、wasmビルドでは動きません。私の場合は、以下のように target.'cfg
を使って依存関係を記述する必要がありました。
[target.'cfg(target_arch = "x86_64")'.dependencies]
bevy_remote_inspector = "0.1.0"
こうして起動すると、デフォルトでは ws://localhost:3000
で Bevy の Remote のポートが開きます。そしてここが特徴的なのですが、UIはウェブアプリケーションとしてデプロイされています。https://bevy-remote-inspector.pages.dev/ というURLを開くとこれがローカルのアプリケーションに接続します。なのでデバッグ用のツールを個別にローカルにインストールする必要がありません。
実際に使ってみると、こんな感じになりました。デバッグツールにはゲームの状態がリアルタイムに表示されていますし、エンティティのコンポーネント一覧からプロパティをいじると、それがリアルタイムにゲームのほうに反映されます。素晴らしい!
それでこのツールをいじっていたら、さっそく自分のゲームのバグを見つけました。ゲーム本編からメイン画面に戻ったときに、一部のエンティティ(ゲーム内にあったランタンの光源)が消去されず残ったままになっていました。printf
デバッグも有用なのですが、ちゃんとGUIデバッガで観察することも大切ですね。
そのほかのデバッグツール
bevy_inspector.nvim
UIがNeovimになっているやつ。私はNeoVimは使っていないので今回はパス。
bevy-remote-devtools
TauriベースのUIのやつ。今はメンテナンスされていないようです。
bevy-inspector-egui
私も今まで使っていたやつ。