3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🦀ひとりRustとBevyでゲーム開発🕊️Advent Calendar 2024

Day 7

【Rustのまほう2】#7 コンポーネントいろいろ

Last updated at Posted at 2024-12-06

Bevyのエンティティは様々なコンポーネントの集合体で、たとえば位置を指定するTransformコンポーネントというものがあることは紹介しました。ほかにも、サードパーティーで提供されるコンポーネントもあれば、Bevy組み込みのコンポーネントもあります。ここでは、主にBevy組み込みのコンポーネントからよく使うもの、重要なものを簡単に紹介します。

Nameコンポーネント

NameコンポーネントはBevy組み込みのコンポーネントで、エンティティの名前を指定します。たとえば、3日目の記事で紹介したデバッグ用のプラグインbevy-inspector-eguiでは、デフォルトではコンポーネントの名前が表示されますが、Nameコンポーネントをエンティティに追加することで、表示されるときの名前を変更できます。これによって、一覧から絞り込むときにも便利になります。

Parentコンポーネント/Chilidrenコンポーネント

エンティティは親子関係を持つことがあります。ParentChildrenは親子関係を辿るための特殊なコンポーネントです。これはエンティティの生成時には直接指定するものではなく、Bevyが自動的に管理します。今後の記事でクエリを扱うときに、もう少し詳しく紹介したいと思います。

Visibilityコンポーネント

エンティティの表示非表示を切り替えるコンポーネントです。非表示にするにはエンティティを削除してしまう手もありますが、多少は重い処理になりますし、普通はVisibilityで切り替えます。以下の三種類があります。

  • 親の表示状態を継承する Inherited
  • 親の表示状態に関わらず隠す Hidden
  • 親の表示状態に関わらず表示する Visible

また、通常はあまり直接使うことはないと思いますが、親の表示状態を累積で計算した InheritedVisibility や、条件に応じて表示を切り替える ViewVisibility というものもあります。たとえば、画像を表示するSpriteコンポーネントは画面から外れると、ViewVisibilityfalse となり、画像描画のための不要な処理が省かれます。このあたりは内部的に勝手に処理されることなので気にしなくて大丈夫なのですが、知識として知っておくとトラブルシューティングで役に立つこともあるでしょう。

StateScopedコンポーネント

StateScopedは、ゲームの状態が切り替わったときに自動で削除するエンティティを指定するためのコンポーネントです。

たとえば、タイトル画面にタイトル画像のエンティティを生成したとして、ゲーム本編に進んだらさきほどのタイトル画像のエンティティは削除します。このとき、削除のコードを手動で書くこともできますが、それはかなり煩雑になりやすいです。そこで、タイトル画面Titleとゲーム本編InGameというステートを定義し、TitleからInGameへとステートが切り替わったときに、StateScoped(Title)コンポーネントを含むエンティティを自動的に削除できます。

このStateScopedコンポーネントは個人的にはかなり重要だと思います。使い方はステートで紹介するかもしれません。

さいごに

具体的なコードも無ければ、スクリーンショットもないので、読んでてなんともピンとこない記事になってしまいました……。いやでもコンポーネントはBevyの中核でして……。あまり地味な話ばかりでは面白くないので、次回は少しゲーム内容の話ができたらと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?