佐藤のメモ帳

Rust, Python, Java, AWS, etc...

Rust Bevy Query Setsについて

はじめに

本記事はBevy非公式(と思えないほど素晴らしい)サイトのメモである。

bevy-cheatbook.github.io

メモ

変更の競合が発生することを防ぐため、同じComponentに対する複数のQueryを持つことはできない。
ただ、QuerySetを使用することで以下のように複数のQueryを設定できる。
変更の可能性があるQueryは一度に1つしか使用されなくなり、競合を防ぐ。

fn reset_health(
    // EnemyのHealthとPlayerのHealthにアクセスする
    // 一部のEntityは以下のQueryの両方に合致する可能性がある
    mut q: QuerySet<(
        Query<&mut Health, With<Enemy>>,
        Query<&mut Health, With<Player>>
    )>,
) {
    // EnemyにHealthをセットする
    for mut health in q.q0_mut().iter_mut() {
        health.hp = 50.0;
    }

    // PlayerにHealthをセットする
    for mut health in q.q1_mut().iter_mut() {
        health.hp = 100.0;
    }
}