use bevy::prelude::*; use bevy_spine::{ SkeletonController, SkeletonData, Spine, SpineBundle, SpinePlugin, SpineReadyEvent, SpineSet, }; fn main() { App::new() .add_plugins((DefaultPlugins, SpinePlugin)) .add_systems(Startup, setup) .add_systems(Update, on_spawn.in_set(SpineSet::OnReady)) .run(); } fn setup( asset_server: Res, mut commands: Commands, mut skeletons: ResMut>, ) { commands.spawn(Camera2dBundle::default()); let skeleton = SkeletonData::new_from_json( asset_server.load("spineboy/export/spineboy-pro.json"), asset_server.load("spineboy/export/spineboy-pma.atlas"), ); let skeleton_handle = skeletons.add(skeleton); commands.spawn(SpineBundle { skeleton: skeleton_handle.clone(), transform: Transform::from_xyz(0., -200., 0.), ..Default::default() }); } fn on_spawn( mut spine_ready_event: EventReader, mut spine_query: Query<&mut Spine>, ) { for event in spine_ready_event.read() { if let Ok(mut spine) = spine_query.get_mut(event.entity) { let Spine(SkeletonController { skeleton, animation_state, .. }) = spine.as_mut(); skeleton.set_scale(Vec2::splat(0.5)); let _ = animation_state.set_animation_by_name(0, "portal", true); } } }