Animation example + adding animaiton to GLTF inspector
parent
8b257b1914
commit
c7209ee246
@ -0,0 +1,75 @@
|
|||||||
|
use std::f32::consts::PI;
|
||||||
|
|
||||||
|
use bevy::{pbr::CascadeShadowConfigBuilder, prelude::*};
|
||||||
|
|
||||||
|
#[derive(Resource)]
|
||||||
|
struct AnimationClips(Vec<Handle<AnimationClip>>);
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
App::new()
|
||||||
|
.add_plugins(DefaultPlugins.set(WindowPlugin {
|
||||||
|
primary_window: Some(Window {
|
||||||
|
title: "Animation WTF".into(),
|
||||||
|
resolution: (640., 480.).into(),
|
||||||
|
..default()
|
||||||
|
}),
|
||||||
|
..default()
|
||||||
|
}))
|
||||||
|
.add_startup_system(init)
|
||||||
|
.add_system(spawn_animation)
|
||||||
|
.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn init(mut commands: Commands, server: Res<AssetServer>) {
|
||||||
|
// Load gltf/animation assets
|
||||||
|
commands.insert_resource(AnimationClips(vec![
|
||||||
|
server.load("models/monkey-nod.glb#Animation0")
|
||||||
|
]));
|
||||||
|
|
||||||
|
commands
|
||||||
|
.spawn(SpatialBundle { ..default() })
|
||||||
|
.with_children(|parent| {
|
||||||
|
// spawn camera
|
||||||
|
parent.spawn(Camera3dBundle {
|
||||||
|
transform: Transform::from_xyz(10.0, 10.0, 15.0).looking_at(Vec3::ZERO, Vec3::Y),
|
||||||
|
..default()
|
||||||
|
});
|
||||||
|
|
||||||
|
parent.spawn(DirectionalLightBundle {
|
||||||
|
transform: Transform::from_rotation(Quat::from_euler(
|
||||||
|
EulerRot::ZYX,
|
||||||
|
0.0,
|
||||||
|
1.0,
|
||||||
|
-PI / 4.0,
|
||||||
|
)),
|
||||||
|
directional_light: DirectionalLight {
|
||||||
|
shadows_enabled: true,
|
||||||
|
..default()
|
||||||
|
},
|
||||||
|
cascade_shadow_config: CascadeShadowConfigBuilder {
|
||||||
|
first_cascade_far_bound: 20.0,
|
||||||
|
maximum_distance: 40.0,
|
||||||
|
..default()
|
||||||
|
}
|
||||||
|
.into(),
|
||||||
|
..default()
|
||||||
|
});
|
||||||
|
parent.spawn(SceneBundle {
|
||||||
|
scene: server.load("models/monkey-nod.glb#Scene0"),
|
||||||
|
..default()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
fn spawn_animation(
|
||||||
|
animations: Res<AnimationClips>,
|
||||||
|
mut player: Query<&mut AnimationPlayer>,
|
||||||
|
mut done: Local<bool>,
|
||||||
|
) {
|
||||||
|
if !*done {
|
||||||
|
if let Ok(mut player) = player.get_single_mut() {
|
||||||
|
player.play(animations.0[0].clone_weak()).repeat();
|
||||||
|
*done = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue