Rust Bevy を使ってみたメモ hierarchyについて

Rust Bevy を使ってみたメモ hierarchyについて

親子関係で詰まっているので、とりあえず仕様を解明していこうかなと思います

とりあえず、GlobalTransformを変更しないで親子関係を破壊しようとすると表示されなくなる見たいですね

fn destroy (
    mut commands: Commands,
    time: Res<Time>,
    mut game_timer: ResMut<GameTimer>,
    key_input: Res<ButtonInput<KeyCode>>,
    parent_object_query: Query<(Entity ,&Transform), (With<Parent>, Without<Child>)>,
    child_object_query : Query<(Entity ,&Transform), (With<Child>, Without<Parent>)>,

) {
    if game_timer.0.tick(time.delta()).just_finished() {
        parent_object_query.iter().for_each (|(ent, trs)| {
            println!("parent entity : {:?}", ent);
            println!("parent transf : {:?}", trs);
        });
        child_object_query.iter().for_each (|(ent, trs)| {
            println!("child entity : {:?}", ent);
            println!("child transf : {:?}", trs);
            if key_input.pressed(KeyCode::ArrowLeft) {
                commands.entity(ent).remove_parent_in_place();
                println!("消えました");
            }
        });
    }
}

出力結果

parent entity : 2v1
parent transf : Transform { translation: Vec3(0.0, 0.0, 0.0), rotation: Quat(0.0, 0.0, 0.0, 1.0), scale: Vec3(40.0, 40.0, 0.0) }
child entity : 3v1
child transf : Transform { translation: Vec3(-1.0, 0.0, 0.0), rotation: Quat(0.0, 0.0, 0.0, 1.0), scale: Vec3(1.0, 1.0, 1.0) }
消えました
parent entity : 2v1
parent transf : Transform { translation: Vec3(0.0, 0.0, 0.0), rotation: Quat(0.0, 0.0, 0.0, 1.0), scale: Vec3(40.0, 40.0, 0.0) }
child entity : 3v1
child transf : Transform { translation: Vec3(-40.0, 0.0, 0.0), rotation: Quat(NaN, NaN, NaN, NaN), scale: Vec3(40.0, 40.0, 0.0) }

おそらくchild_objectのtransformのrotationがNaNになっているのが原因だと思われますが、なんでこうなっているかはわかりませんね…

ちなみにGlobalTransformを維持しないで親子関係を破壊すると

parent entity : 2v1
parent transf : Transform { translation: Vec3(0.0, 0.0, 0.0), rotation: Quat(0.0, 0.0, 0.0, 1.0), scale: Vec3(40.0, 40.0, 0.0) }
child entity : 3v1
child transf : Transform { translation: Vec3(-1.0, 0.0, 0.0), rotation: Quat(0.0, 0.0, 0.0, 1.0), scale: Vec3(1.0, 1.0, 1.0) }
消えました
parent entity : 2v1
parent transf : Transform { translation: Vec3(0.0, 0.0, 0.0), rotation: Quat(0.0, 0.0, 0.0, 1.0), scale: Vec3(40.0, 40.0, 0.0) }
child entity : 3v1
child transf : Transform { translation: Vec3(-1.0, 0.0, 0.0), rotation: Quat(0.0, 0.0, 0.0, 1.0), scale: Vec3(1.0, 1.0, 1.0) }

上のようになります

この場合はchild_objectのtransformのrotationがNaNになっていないので表示されています

って、執筆中に気が付いたのですが、bevyの公式docsからremove_parent_in_place()消えてません??

詳細を確認しようとして検索してもヒットしなくなったのですが…
これは、非推奨の行為なのかもしれないですね…

ということで、おそらくこのやり方は使えなさそうなので、別のやり方を模索しようと思います

いちおう、後々のことを考えると、列ごとにオブジェクトを管理するのが楽そうなので、その方向で進めていきたいと思います

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です