#kdtree #bevy #bevy-plugin #gamedev #knn #最近邻

bevy_spatial

用于跟踪空间索引中bevy实体的crate

12个版本 (破坏性更新)

0.9.0 2024年7月6日
0.8.0 2024年3月4日
0.7.0 2023年11月5日
0.5.1 2023年5月1日
0.1.1 2022年5月4日

#307数据结构

Download history 10/week @ 2024-04-29 1/week @ 2024-05-06 13/week @ 2024-05-13 13/week @ 2024-05-20 18/week @ 2024-05-27 12/week @ 2024-06-03 10/week @ 2024-06-10 4/week @ 2024-06-17 1/week @ 2024-06-24 103/week @ 2024-07-01 88/week @ 2024-07-08 71/week @ 2024-07-15 80/week @ 2024-07-22 103/week @ 2024-07-29 26/week @ 2024-08-05 30/week @ 2024-08-12

每月243次下载

MIT/Apache

47KB
528 代码行

bevy_spatial

一个用于在空间索引中跟踪您的实体并查询它们的bevy插件。

crates.io

当前实现的功能

功能 描述
kdtree (默认) 空间查找的KD-Tree,在更新时完全重建,但重建速度快。在大多数情况下表现良好。
use bevy_spatial::{AutomaticUpdate, KDTree3, TransformMode, SpatialAccess};

#[derive(Component, Default)]
struct TrackedByKDTree;

fn main() {
    App::new()
        .add_plugins(AutomaticUpdate::<TrackedByKDTree>::new()
            .with_frequency(Duration::from_secs_f32(0.3))
            .with_transform(TransformMode::GlobalTransform))
        .add_systems(Update, use_neighbour);
    // ...
}

type NNTree = KDTree3<TrackedByKDTree>; // type alias for later

// spawn some entities with the TrackedByKDTree component

fn use_neighbour(tree: Res<NNTree>){
    if let Some((pos, entity)) = tree.nearest_neighbour(Vec3::ZERO) {
        // pos: Vec3
        // do something with the nearest entity here
    }
}

有关使用详情,请参阅 示例

兼容的bevy版本

bevy bevy_spatial
0.14 0.9.0
0.13 0.8.0
0.12 0.7.0
0.11 0.6.0
0.10 0.5.0
0.9 0.4.0
0.8 0.3.0
0.8 0.2.1
0.7 0.1

wasm注意事项:在wasm上禁用了kdtree的rayon加速,使其稍微慢一些。

依赖项

~23MB
~429K SLoC