Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/examples/3d/animated_material.rs
6592 views
1
//! Shows how to animate material properties
2
3
use bevy::prelude::*;
4
5
fn main() {
6
App::new()
7
.add_plugins(DefaultPlugins)
8
.add_systems(Startup, setup)
9
.add_systems(Update, animate_materials)
10
.run();
11
}
12
13
fn setup(
14
mut commands: Commands,
15
asset_server: Res<AssetServer>,
16
mut meshes: ResMut<Assets<Mesh>>,
17
mut materials: ResMut<Assets<StandardMaterial>>,
18
) {
19
commands.spawn((
20
Camera3d::default(),
21
Transform::from_xyz(3.0, 1.0, 3.0).looking_at(Vec3::new(0.0, -0.5, 0.0), Vec3::Y),
22
EnvironmentMapLight {
23
diffuse_map: asset_server.load("environment_maps/pisa_diffuse_rgb9e5_zstd.ktx2"),
24
specular_map: asset_server.load("environment_maps/pisa_specular_rgb9e5_zstd.ktx2"),
25
intensity: 2_000.0,
26
..default()
27
},
28
));
29
30
let cube = meshes.add(Cuboid::new(0.5, 0.5, 0.5));
31
32
const GOLDEN_ANGLE: f32 = 137.507_77;
33
34
let mut hsla = Hsla::hsl(0.0, 1.0, 0.5);
35
for x in -1..2 {
36
for z in -1..2 {
37
commands.spawn((
38
Mesh3d(cube.clone()),
39
MeshMaterial3d(materials.add(Color::from(hsla))),
40
Transform::from_translation(Vec3::new(x as f32, 0.0, z as f32)),
41
));
42
hsla = hsla.rotate_hue(GOLDEN_ANGLE);
43
}
44
}
45
}
46
47
fn animate_materials(
48
material_handles: Query<&MeshMaterial3d<StandardMaterial>>,
49
time: Res<Time>,
50
mut materials: ResMut<Assets<StandardMaterial>>,
51
) {
52
for material_handle in material_handles.iter() {
53
if let Some(material) = materials.get_mut(material_handle)
54
&& let Color::Hsla(ref mut hsla) = material.base_color
55
{
56
*hsla = hsla.rotate_hue(time.delta_secs() * 100.0);
57
}
58
}
59
}
60
61