load_gltf_extras/
load_gltf_extras.rs1use bevy::{
4 gltf::{GltfExtras, GltfMaterialExtras, GltfMeshExtras, GltfSceneExtras},
5 prelude::*,
6};
7
8fn main() {
9 App::new()
10 .add_plugins(DefaultPlugins)
11 .add_systems(Startup, setup)
12 .add_systems(Update, check_for_gltf_extras)
13 .run();
14}
15
16#[derive(Component)]
17struct ExampleDisplay;
18
19fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
20 commands.spawn((
21 Camera3d::default(),
22 Transform::from_xyz(2.0, 2.0, 2.0).looking_at(Vec3::ZERO, Vec3::Y),
23 ));
24
25 commands.spawn(DirectionalLight {
26 shadows_enabled: true,
27 ..default()
28 });
29
30 commands.spawn(SceneRoot(asset_server.load(
32 GltfAssetLabel::Scene(0).from_asset("models/extras/gltf_extras.glb"),
33 )));
34
35 commands.spawn((
37 Text::default(),
38 TextFont {
39 font_size: 15.,
40 ..default()
41 },
42 Node {
43 position_type: PositionType::Absolute,
44 top: px(12),
45 left: px(12),
46 ..default()
47 },
48 ExampleDisplay,
49 ));
50}
51
52fn check_for_gltf_extras(
53 gltf_extras_per_entity: Query<(
54 Entity,
55 Option<&Name>,
56 Option<&GltfSceneExtras>,
57 Option<&GltfExtras>,
58 Option<&GltfMeshExtras>,
59 Option<&GltfMaterialExtras>,
60 )>,
61 mut display: Single<&mut Text, With<ExampleDisplay>>,
62) {
63 let mut gltf_extra_infos_lines: Vec<String> = vec![];
64
65 for (id, name, scene_extras, extras, mesh_extras, material_extras) in
66 gltf_extras_per_entity.iter()
67 {
68 if scene_extras.is_some()
69 || extras.is_some()
70 || mesh_extras.is_some()
71 || material_extras.is_some()
72 {
73 let formatted_extras = format!(
74 "Extras per entity {} ('Name: {}'):
75 - scene extras: {:?}
76 - primitive extras: {:?}
77 - mesh extras: {:?}
78 - material extras: {:?}
79 ",
80 id,
81 name.unwrap_or(&Name::default()),
82 scene_extras,
83 extras,
84 mesh_extras,
85 material_extras
86 );
87 gltf_extra_infos_lines.push(formatted_extras);
88 }
89 display.0 = gltf_extra_infos_lines.join("\n");
90 }
91}