Bevyのエンティティは様々なコンポーネントの集合体で、たとえば位置を指定するTransform
コンポーネントというものがあることは紹介しました。ほかにも、サードパーティーで提供されるコンポーネントもあれば、Bevy組み込みのコンポーネントもあります。ここでは、主にBevy組み込みのコンポーネントからよく使うもの、重要なものを簡単に紹介します。
Name
コンポーネント
Name
コンポーネントはBevy組み込みのコンポーネントで、エンティティの名前を指定します。たとえば、3日目の記事で紹介したデバッグ用のプラグインbevy-inspector-egui
では、デフォルトではコンポーネントの名前が表示されますが、Name
コンポーネントをエンティティに追加することで、表示されるときの名前を変更できます。これによって、一覧から絞り込むときにも便利になります。
Parent
コンポーネント/Chilidren
コンポーネント
エンティティは親子関係を持つことがあります。Parent
やChildren
は親子関係を辿るための特殊なコンポーネントです。これはエンティティの生成時には直接指定するものではなく、Bevyが自動的に管理します。今後の記事でクエリを扱うときに、もう少し詳しく紹介したいと思います。
Visibility
コンポーネント
エンティティの表示非表示を切り替えるコンポーネントです。非表示にするにはエンティティを削除してしまう手もありますが、多少は重い処理になりますし、普通はVisibility
で切り替えます。以下の三種類があります。
- 親の表示状態を継承する
Inherited
- 親の表示状態に関わらず隠す
Hidden
- 親の表示状態に関わらず表示する
Visible
また、通常はあまり直接使うことはないと思いますが、親の表示状態を累積で計算した InheritedVisibility
や、条件に応じて表示を切り替える ViewVisibility
というものもあります。たとえば、画像を表示するSprite
コンポーネントは画面から外れると、ViewVisibility
が false
となり、画像描画のための不要な処理が省かれます。このあたりは内部的に勝手に処理されることなので気にしなくて大丈夫なのですが、知識として知っておくとトラブルシューティングで役に立つこともあるでしょう。
StateScoped
コンポーネント
StateScoped
は、ゲームの状態が切り替わったときに自動で削除するエンティティを指定するためのコンポーネントです。
たとえば、タイトル画面にタイトル画像のエンティティを生成したとして、ゲーム本編に進んだらさきほどのタイトル画像のエンティティは削除します。このとき、削除のコードを手動で書くこともできますが、それはかなり煩雑になりやすいです。そこで、タイトル画面Title
とゲーム本編InGame
というステートを定義し、Title
からInGame
へとステートが切り替わったときに、StateScoped(Title)
コンポーネントを含むエンティティを自動的に削除できます。
このStateScoped
コンポーネントは個人的にはかなり重要だと思います。使い方はステートで紹介するかもしれません。
さいごに
具体的なコードも無ければ、スクリーンショットもないので、読んでてなんともピンとこない記事になってしまいました……。いやでもコンポーネントはBevyの中核でして……。あまり地味な話ばかりでは面白くないので、次回は少しゲーム内容の話ができたらと思います。