Expand description
§Bevy MotionGfx
An integration of the MotionGfx crate for the Bevy game engine.
§Usage
§Initialization
The BevyMotionGfxPlugin must be added for timeline and controllers
to work.
use bevy::prelude::*;
use bevy_motiongfx::BevyMotionGfxPlugin;
App::new()
.add_plugins((DefaultPlugins, BevyMotionGfxPlugin))
// Add systems here...
.run();§Create Animations
For a more thorough walkthrough on the Timeline API, read the
MotionGfx docs.
This example demonstrates how to animate an Entity.
use bevy::prelude::*;
use bevy_motiongfx::prelude::*;
fn build_timeline(
mut commands: Commands,
mut motiongfx: ResMut<MotionGfxWorld>,
) {
// Spawn the Entity.
let entity = commands
.spawn(Transform::from_xyz(-3.0, 0.0, 0.0))
.id();
// Build the timeline.
let mut b = TimelineBuilder::new();
let track = b
.act_interp(entity, field!(<Transform>::translation::x), |x| {
x + 6.0
})
.play(1.0)
.compile();
b.add_tracks(track);
let timeline = b.compile();
// Spawn the timeline.
commands.spawn(motiongfx.add_timeline(timeline));
}This example demonstrates how to animate an Asset.
use bevy::prelude::*;
use bevy_motiongfx::prelude::*;
fn build_timeline(
mut commands: Commands,
mut motiongfx: ResMut<MotionGfxWorld>,
mut materials: ResMut<Assets<StandardMaterial>>
) {
// Create the asset.
let material =
materials.add(StandardMaterial::from_color(Srgba::BLUE));
// Spawn an entity to prevent the asset from dropping.
commands.spawn(MeshMaterial3d(material.clone()));
// Build the timeline.
let mut b = TimelineBuilder::new();
let track = b
.act_interp(
// AssetIds must be type-erased.
material.untyped().id(),
field!(<StandardMaterial>::base_color),
|_| Srgba::RED.into(),
)
.play(1.0)
.compile();
b.add_tracks(track);
let timeline = b.compile();
// Spawn the timeline.
commands.spawn(motiongfx.add_timeline(timeline));
}§Controllers
Controllers are helper components for automating the target time and
target track of a Timeline.
use bevy::prelude::*;
use bevy_motiongfx::prelude::*;
fn build_timeline(
mut commands: Commands,
mut motiongfx: ResMut<MotionGfxWorld>,
) {
// Build the timeline.
let mut b = TimelineBuilder::new();
// Add tracks here...
let timeline = b.compile();
// Spawn the timeline with a controller.
commands.spawn((
motiongfx.add_timeline(timeline),
RealtimePlayer::new().with_playing(true),
));
}§Version Matrix
| Bevy | MotionGfx | Bevy MotionGfx |
|---|---|---|
| 0.18 | 0.2 | 0.2 |
| 0.17 | 0.1 | 0.1 |
§License
bevy_motiongfx is dual-licensed under either:
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
This means you can select the license you prefer! This dual-licensing approach is the de-facto standard in the Rust ecosystem and there are very good reasons to include both.
Re-exports§
pub use motiongfx;
Modules§
Macros§
- impl_
float_ interpolation - register_
fields - Recursively register fields.