Assets & Scenes
Load textures, models, and scenes in Bevy - handles, asset states, and hot-reload workflows.
Busca en todas las páginas de la documentación
Load textures, models, and scenes in Bevy - handles, asset states, and hot-reload workflows.
fn setup(asset_server: Res<AssetServer>, mut commands: Commands) {
let texture: Handle<Image> = asset_server.load("sprites/player.png");
commands.spawn(Sprite::from_image(texture));
}When to reach for this:
use bevy::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Startup, load_scene)
.add_systems(Update, watch_loading)
.run();
}
#[derive(Resource)]
struct LevelHandle(Handle<Scene>);
fn load_scene(mut commands: Commands, asset_server: Res<AssetServer>) {
let scene = asset_server.load("scenes/level1.scn.ron");
commands.insert_resource(LevelHandle(scene));
}
fn watch_loading(
level: Res<LevelHandle>,
asset_server: Res<AssetServer>,
mut scenes: ResMut<Assets<Scene>>,
mut done: Local<bool>,
mut commands: Commands,
) {
if *done {
return;
}
match asset_server.load_state(&level.0) {
bevy::asset::LoadState::Loaded => {
if scenes.get(&level.0).is_some() {
commands.spawn(DynamicSceneRoot(level.0.clone()));
*done = true;
}
}
bevy::asset::LoadState::Failed(err) => eprintln!("load failed: {err:?}"),
_ => {}
}
}What this demonstrates:
LoadState before spawning DynamicSceneRootAssets<T> storages.| Path | Content |
|---|---|
assets/sprites/ | PNG/WebP textures |
assets/audio/ | OGG/WAV |
assets/scenes/ | .scn.ron levels |
assets/models/ | GLTF/OBJ 3D |
LoadState::Loaded.Reflect on custom components.| Alternative | Use When | Don't Use When |
|---|---|---|
Embed with include_bytes! | Tiny jam binary | Large art pipeline |
| External pack files | DRM or DLC | Simple open mods |
| Procedural only | Shader toys | Artist-driven content |
| Asset streaming crate | Open world | Small linear levels |
SceneRoot from glTF path spawns meshes/materials - common 3D path in Bevy examples.
asset_server.load("audio/hit.ogg") -> Handle<AudioSource> on AudioPlayer components.
asset_server.load("player.png#Texture") style labels for multi-asset files like GLTF.
Collect handles in menu state; transition when all is_loaded_with_dependencies.
Load assets from user dir with separate AssetSource mounting - advanced plugin pattern.
Content hash filenames or manifest JSON for cache busting in shipped builds.
Scenes are serialized hierarchies; prefabs often custom Bundle spawn functions in code.
Drop handles when level unloads; Assets::remove unused entries in scene transitions.
Use headless/minimal plugins and mock handles for logic tests.
Core to Bevy Engine asset plugin architecture.
Stack versions: This page was written for Rust 1.97.0 (edition 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, and Polars 0.46+.
Revisado por Chris St. John·Última actualización: 16 jul 2026