| Crates.io | bevy_motiongfx |
| lib.rs | bevy_motiongfx |
| version | 0.2.0 |
| created_at | 2025-10-23 08:51:27.029173+00 |
| updated_at | 2026-01-22 14:04:30.881844+00 |
| description | An implementation of the MotionGfx framework for Bevy. |
| homepage | |
| repository | https://github.com/voxell-tech/motiongfx |
| max_upload_size | |
| id | 1896815 |
| size | 112,387 |
An integration of the MotionGfx crate for the Bevy game engine.
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();
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 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),
));
}
| Bevy | MotionGfx | Bevy MotionGfx |
|---|---|---|
| 0.18 | 0.2 | 0.2 |
| 0.17 | 0.1 | 0.1 |
bevy_motiongfx is dual-licensed under either:
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.