SuperAPI AI 工具集

bevy-ecs-queries

编程与开发

查看项目

更新于 10-15 17:33

技能介绍

用途:在 Bevy 0.19 的系统中读写组件,按存在性(With/Without)、或关系(Or)与变化检测(Changed/Added)过滤实体,对大实体集并行迭代,或用透镜借用查询子集;也用于排查升级到 0.19 后涉及 IterQueryData、SingleEntityQueryData 的编译错误。

主要能力与用法:顺序迭代查询用 &q 读取、&mut q 写入,例如 Query<(&Velocity, &mut Transform)> 在循环中修改 Transform;Changed<T> 在插入或修改时触发,Added<T> 仅在插入时触发;With/Without 约束实体,Or<(Added, Changed)> 在过滤条件间取或;实体数大于约 1 万且单实体工作不轻时可用 q.par_iter_mut().for_each(...) 并行;q.transmute_lens::<&Transform>() 把查询临时缩窄为子查询,便于传入辅助函数。

限制与 0.19 注意点:嵌套查询新增了约束,泛型可变迭代通常需要 D: IterQueryData,单实体访问、查询转换/连接、遍历与排序可能需要 D: SingleEntityQueryData;不可迭代查询数据使用 lending 迭代,需调 iter.fetch_next()。EntityMut::get_components_mut::<(&mut A, &mut B)>() 返回 Result,并带 SingleEntityQueryData 约束。Query::get/get_mut 返回 Result 而非 Option。Or<(With<A>, With<B>)> 针对过滤器而非组件类型,Or<(A, B)> 无法编译。Changed/Added 基于 tick,报告的是修改而非语义不等;par_iter_mut 不能与 Commands 或外部可变状态共用。具体费用与价格信息暂未提供。