bevy_sprite3d
Use 2d sprites in a 3d bevy scene.
This is a pretty common setup in other engines (unity, godot, etc). Useful for:
- 2d games using bevy's lighting
(orthographic camera, 3d sprites)
- 2d games with easier parallax and scale
(perspective camera, 3d sprites)
- 2d games in a 3d world
(perspective camera, both 3d sprites and meshes)
- 3d games with billboard sprites (a la Delver)
Both meshes and materials are internally cached, so this crate can be used for things like tilemaps without issue.
Examples
Example using bevy_sprite3d
:
A more complicated scene: examples/dungeon.rs
. Try this one with cargo run --example dungeon
.
Some more examples. These don't use bevy, but demonstrate the effect style:
Usage
Check out the examples for details. Tl;dr initialize the plugin with
app.add_plugin(Sprite3dPlugin)
and spawn sprites with
fn setup(
mut commands: Commands,
images: Res<ImageAssets>,
mut sprite_params: Sprite3dParams
) {
// ----------------------- Single Static Sprite ----------------------------
commands.spawn_bundle(Sprite3d {
image: images.sprite.clone(),
pixels_per_metre: 400.,
partial_alpha: true,
unlit: true,
..default()
// transform: Transform::from_xyz(0., 0., 0.),
// pivot: Some(Vec2::new(0.5, 0.5)),
// double_sided: true,
}.bundle(&mut sprite_params));
// ------------------- Texture Atlas (Sprite Sheet) ------------------------
commands.spawn_bundle(AtlasSprite3d {
atlas: images.sprite_sheet.clone(),
pixels_per_metre: 32.,
partial_alpha: true,
unlit: true,
index: 3,
..default()
// transform: Transform::from_xyz(0., 0., 0.),
// pivot: Some(Vec2::new(0.5, 0.5)),
// double_sided: true,
}.bundle(&mut sprite_params));
}
One small complication: your image assets should be loaded prior to spawning, as bevy_sprite3d
uses some properties of the image (such as size and aspect ratio) in constructing the 3d mesh.
To that end, I'd recommend using bevy_asset_loader
for simplicity. Examples are provided both with and without it.
Versioning
bevy_sprite3d version |
bevy version |
---|---|
2.4 | 0.10 |
2.3 | 0.9 |
2.2 | 0.9 |
2.1 | 0.9 |
2.0 | 0.8 |
1.1 | 0.8 |
1.0 | 0.7 |