//! Illustrates how to rotate an object around an axis. use bevy::prelude::*; use std::f32::consts::TAU; // Define a component to designate a rotation speed to an entity. #[derive(Component)] struct Rotatable { speed: f32, } fn main() { App::new() .add_plugins(DefaultPlugins) .add_systems(Startup, setup) .add_systems(Update, rotate_cube) .run(); } fn setup( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, ) { // Spawn a cube to rotate. commands.spawn(( PbrBundle { mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), material: materials.add(Color::WHITE.into()), transform: Transform::from_translation(Vec3::ZERO), ..default() }, Rotatable { speed: 0.3 }, )); // Spawn a camera looking at the entities to show what's happening in this example. commands.spawn(Camera3dBundle { transform: Transform::from_xyz(0.0, 10.0, 20.0).looking_at(Vec3::ZERO, Vec3::Y), ..default() }); // Add a light source so we can see clearly. commands.spawn(PointLightBundle { transform: Transform::from_translation(Vec3::ONE * 3.0), ..default() }); } // This system will rotate any entity in the scene with a Rotatable component around its y-axis. fn rotate_cube(mut cubes: Query<(&mut Transform, &Rotatable)>, timer: Res