Bevy Engineプラグイン 便利そうなものまとめ
ちなみにBevyプラグイン一覧は公式ページのこちらから見れます。
最近Bevy Engineで遊び始めて、いろんなプラグインがあるようなので、気になったプラグインを都度メモ。
一つ目は bevy_pixel_camera
。2Dゲームをピクセルパーフェクトで作りたいときに便利そう。
↓も類似のプラグイン。どちらが便利かは使ってみて次第?
bevy_points
: 点群を扱うときに便利そうなプラグイン。
ちなみに Update
で各点を更新したくなったときは、このStackOverflowの記事が参考になりそう。
Bevyにデベロッパーコンソールを追加してくれるプラグイン。
Rustを対話的に動かすための工夫がなされているようで、クエリを取得するためにもう少し開発が要るとのこと。将来性が楽しみ。
GLTFだけでなく、FBXを読み込めるようにするプラグイン。
自分でちゃんと動作確認をしたわけではないけれど、これが使えればFBXを選択肢に入れられるのでいろいろ楽。
ジョイスティックやマウス、キーボードからの入力を一元管理できるプラグイン🎮。ボタンと動作のバインディングなども管理でき、ActionState
コンポーネントはステート管理にも役立ちそう。
(ところでActionState
がResource
ではなくてComponent
なのがなんとなく不思議。コードを深く読めば理由が理解できる…?)
画面にFPSを表示するプラグイン。
ちなみにFPSに留まらない各種プロファイリングについては、公式ドキュメントが詳しい。
https://github.com/bevyengine/bevy/blob/main/docs/profiling.md
(ドキュメントで紹介されているtracyは、BevyやRustに限らず使えるツールのようなので汎用性がありそう。)
Bevyのプラグインではないのだけれど、ジェネラティブに造形をする際に便利そうな、SDFからメッシュ (STL) を作成するライブラリ。
原理上、ボクセルノイズともいうべきディザノイズが出るので、実際に利用する場合はQuad Remesherなどでリトポするのが良い気はする。(Raymarchで実際にSDFをレンダリングするほうが実用的なケースも多そう。)
JavaScriptバインディング。スクリプトだけに限っていえば、bevy_mod_scriptingを使えばMLuaなど利用できるのだけれど、個人的にBevy Engineの他言語対応や動的APIに興味があり、こちらの使用例の方がより具体的でわかりやすい。このノリでRust以外に広がってくれたらと感じる。
上記プラグインのような開発で、依存関係として以下のような動的操作周りが発展していっているのは素晴らしい。一方でRust的には静的に解決できることが多い方がきっと綺麗ではあるんだろうな。
モデリング、プロシージャル系ライブラリ。bevy連携もついている様子。この辺が進化すればBlenderとかなしでも楽しくなりそう。
マウスやタッチでの選択やドラッグ。自分でレイキャストの計算など考慮しなくても簡単に使えるのがGood。
JSXのような雰囲気でUIが書けるもの。
下記プロポーザルなどにより、同様のマクロがいつかBevy自体にも組み込まれそうな雰囲気。
知り合いに教えてもらった、GUIエディタ拡張。こうしたエディタアドオンはいくつかあるけれど、Prefabにひとつ的を絞っているのは便利そう。
BevyでRerunという可視化ツールを使えるようにする拡張。各種デバッグに超便利そう。READMEにはライブデモもある。( 例: 3D Shapes )
Rerunが何かについては以下の記事が詳しい。
2Dのパス・カーブを扱う際に便利そうなプラグイン。イラレのペンツールと同じノリで使えそう。
UnityでいうところのAnimationCurve相当。
↓の7:07で紹介されていて、個人的にこの機能を待ち望んでいて自分で作ろうかと思っていたくらいなので、とても嬉しい。
モーショングラフィックスを作るのに便利そうなプラグイン。まだあまり詳しく見れてないので、使い勝手など探ってみたい。
UniTaskやUnityのコルーチンのような、非同期の時系列処理を手軽に書けるプラグイン。
紹介記事 (bevy_flurxの元祖がbevy_async_systemだった模様。)
WGSLのグラフエディタ。
ReactやFlutterに似たノリで使える、ReactiveなUIアドオン。
fn counter(mut cx: Cx<u8>) -> impl View {
let counter = cx.use_resource::<Counter>();
Element::new().children((
"The count is: ",
If::new(counter.count & 1 == 0, "even", "odd"),
))
}
もはや標準装備感があって載せてなかったのだけど、BlenderのGLTFであれこれするためのプラグイン。Blender内でBevyのコンポーネントをつけたりなど、BlenderをBevyの標準エディタ化するために必須。
ちなみに2Dの場合はLDTKを使うと楽しい。
煩雑になりがちな、Without<>
を使ったクエリをなくしてくれるプラグイン。
こんな感じのコードが…
fn complex_system(
a_query: Query<&mut Transform, (With<A>, Without<B>, Without<C>, Without<D>, Without<E>, Without<F>, Without<G>, ..., Without<Z>)>,
b_query: Query<&mut Transform, (Without<A>, With<B>, Without<C>, Without<D>, Without<E>, Without<F>, Without<G>, ..., Without<Z>)>,
...,
z_query: Query<&mut Transform, (Without<A>, Without<B>, Without<C>, Without<D>, Without<E>, Without<F>, Without<G>, ..., With<Z>)>,
) {
// ...
}
こんなにスッキリ。↓
fn complex_system(
a_query: Query<&mut Transform, <A as Disjoint>::Only>,
b_query: Query<&mut Transform, <B as Disjoint>::Only>,
...,
z_query: Query<&mut Transform, <Z as Disjoint>::Only>,
) {
// ...
}