4 releases
Uses new Rust 2024
| 0.2.0 | Jan 22, 2026 |
|---|---|
| 0.1.0 | Jan 6, 2026 |
| 0.1.0-rc.2 | Oct 31, 2025 |
| 0.1.0-rc.1 | Oct 23, 2025 |
#554 in Visualization
30 downloads per month
105KB
2.5K
SLoC
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.
Dependencies
~18–61MB
~1M SLoC