#spatial #kdtree #bevy #bevy-plugin #gamedev #neighbours

bevy_spatial

A crate for tracking bevy entities in spatial indices

14 releases (9 breaking)

0.10.0 Dec 3, 2024
0.9.1 Sep 26, 2024
0.9.0 Jul 6, 2024
0.8.0 Mar 4, 2024
0.1.1 May 4, 2022

#311 in Data structures

Download history 7/week @ 2024-08-26 38/week @ 2024-09-02 93/week @ 2024-09-09 38/week @ 2024-09-16 216/week @ 2024-09-23 71/week @ 2024-09-30 27/week @ 2024-10-07 29/week @ 2024-10-14 11/week @ 2024-10-21 7/week @ 2024-10-28 56/week @ 2024-11-04 3/week @ 2024-11-11 137/week @ 2024-11-18 21/week @ 2024-11-25 153/week @ 2024-12-02

317 downloads per month

MIT/Apache

49KB
530 lines

bevy_spatial

A bevy plugin to track your entities in spatial indices and query them.

crates.io

Currently implemented features:

Feature Description
kdtree (default) KD-Tree for spatial lookups which is fully recreated on update, but fast to recreate. Works well in most situations.
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
    }
}

For more details on usage see Examples

compatible bevy versions

bevy bevy_spatial
0.15 0.10.0
0.14 0.9.1
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 caveats: Since the rayon acceleration for kdtree is enabled by default, but rayon doesn't work on wasm, for projects targeting wasm you'll need to disable default features for bevy-spatial and re-enable kdtree

Dependencies

~22–33MB
~536K SLoC