Chunky Bevy
A simple and efficient chunk management system for Bevy game engine, perfect for voxel games, procedural worlds, and any application that needs spatial partitioning.
Features
- 🎯 Simple API - Easy to use chunk management with minimal boilerplate
- 🔄 Automatic Loading - Optional chunk loader component for automatic chunk spawning around entities
- 🗑️ Automatic Unloading - Configurable strategies for chunk lifecycle management (distance, limit, or hybrid)
- 👁️ Visualization - Built-in debug visualization for chunk boundaries
- ⚡ Efficient - HashMap-based chunk lookup with O(1) access
- 🎮 Bevy Integration - First-class Bevy ECS integration with hooks and resources
Quick Start
Add to your Cargo.toml:
[]
= "0.17"
= "0.2"
Basic usage:
use *;
use *;
Features
Default Features
chunk_visualizer- Enables debug visualization of chunk boundarieschunk_loader- Enables automatic chunk loading around ChunkLoader entitieschunk_unloader- Enables automatic chunk unloading with configurable strategiesreflect- Enables Bevy reflection for all types
Optional Features
chunk_info- Logs chunk spawn/despawn events
Disable default features:
= { = "0.2", = false }
Components
Chunk
Marks an entity as a chunk. Automatically registers/unregisters with ChunkManager.
ChunkPos(IVec3)
The chunk's position in chunk-space coordinates. Automatically updates the entity's Transform.
ChunkLoader(IVec3)
Automatically loads chunks in a radius around the entity. The IVec3 defines the loading radius in each direction.
Examples:
ChunkLoader(IVec3::ZERO)- Loads only the chunk the entity is inChunkLoader(IVec3::ONE)- Loads a 3x3x3 cube of chunksChunkLoader(IVec3::new(5, 0, 5))- Loads an 11x1x11 flat area
ChunkPinned
Prevents a chunk from being automatically unloaded. Useful for spawn areas or quest locations.
ChunkUnloadRadius(IVec3)
Defines the unload radius for a specific ChunkLoader. If absent, defaults to the loader's load radius.
Resources
ChunkManager
The main resource for querying and managing chunks.
Unload Strategy Resources
Chunk unloading is opt-in. Insert resources to enable different strategies:
Events
ChunkUnloadEvent
Sent when a chunk is about to be despawned. Read with MessageReader<ChunkUnloadEvent> to save data before removal.
Visualization
Enable chunk boundary visualization:
Helpers
Spawn multiple chunks at once:
use *;
Examples
Run the basic example:
Controls:
- WASD - Move camera
- Q/E - Move camera down/up
- HJKL - Move cube (chunk loader)
- Y/I - Move cube down/up
- Left Mouse Button - Look around
Run the chunk unloading example:
Controls:
- WASD - Move horizontally
- Q/E - Move down/up
- Space - Cycle through unload strategies
- Right-click + drag - Look around
Bevy Version Compatibility
| Chunky Bevy | Bevy |
|---|---|
| 0.2 | 0.17 |
| 0.1 | 0.15 |
License
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.