フィルターの種類
参考:https://docs.rs/bevy/latest/bevy/ecs/query/trait.QueryFilter.html
コンポーネントフィルター
- With
- Tで指定されたコンポーネントを持っているEntityのフィルター
- Without
- Withの否定版
変更検出フィルター
- Added
- 追加後の最初にのみ保持されるコンポーネントのフィルタ 一回限り初期化などに利用します
- Changed
- コマンドで発行されたエンティティの修正(エンティティの作成、エンティティコンポーネントの追加や削除など)のフィルタです
タプルでフィルターの指定
Query<&ComponentA, (With, Without)>
- タプルを利用すると一つのQueryでフィルターを複数定義できる
フィルタの論理演算子
- Or
Query<&ComponentA, Or<(With, Without)>>
- `Or`の中にタプルで定義すると与えられたフィルタのいずれかが適用されるかテストするフィルタになる
自作フィルター
QueryFilter
を#[derive()]
につかすることで新たにフィルターを自作することができる
これにより、
複数のシステム間でフィルターを再利用することができる、
フィルターを組み合わせて、より複雑なフィルターを作成することができる。
#[derive(QueryFilter)]
struct MyFilter<T: Component, P: Component> {
with_a: With<ComponentA>,
or_filter: Or<(With<ComponentC>, Added<ComponentB>)>,
generic_tuple: (With<T>, Without<P>),
}
fn my_system(query: Query<Entity, MyFilter<ComponentD, ComponentE>>) {
// ...
}