# B0004 A runtime warning. An [`Entity`] with a hierarchy-inherited component has a [`Parent`] without the hierarchy-inherited component in question. The hierarchy-inherited components defined in bevy include: - [`ComputedVisibility`] - [`GlobalTransform`] Third party plugins may also define their own hierarchy components, so read the warning message carefully and pay attention to the exact type of the missing component. To fix this warning, add the missing hierarchy component to all ancestors of entities with the hierarchy component you wish to use. The following code will cause a warning to be emitted: ```rust,no_run use bevy::prelude::*; // WARNING: this code is buggy fn setup_cube( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, ) { commands .spawn(TransformBundle::default()) .with_children(|parent| { // cube parent.spawn(PbrBundle { mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), transform: Transform::from_xyz(0.0, 0.5, 0.0), ..default() }); }); // camera commands.spawn(Camera3dBundle { transform: Transform::from_xyz(-2.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y), ..default() }); } fn main() { App::new() .add_plugins(DefaultPlugins) .add_systems(Startup, setup_cube) .run(); } ``` This code **will not** show a cube on screen. This is because the entity spawned with `commands.spawn(…)` doesn't have a [`ComputedVisibility`] component. Since the cube is spawned as a child of an entity without the [`ComputedVisibility`] component, it will not be visible at all. To fix this, you must use [`SpatialBundle`] over [`TransformBundle`], as follows: ```rust,no_run use bevy::prelude::*; fn setup_cube( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, ) { commands // We use SpatialBundle instead of TransformBundle, it contains the // ComputedVisibility component needed to display the cube, // In addition to the Transform and GlobalTransform components. .spawn(SpatialBundle::default()) .with_children(|parent| { // cube parent.spawn(PbrBundle { mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), transform: Transform::from_xyz(0.0, 0.5, 0.0), ..default() }); }); // camera commands.spawn(Camera3dBundle { transform: Transform::from_xyz(-2.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y), ..default() }); } fn main() { App::new() .add_plugins(DefaultPlugins) .add_systems(Startup, setup_cube) .run(); } ``` A similar problem occurs when the [`GlobalTransform`] component is missing. However, when a parent [`GlobalTransform`] is missing, it will simply prevent all transform propagation, including when updating the [`Transform`] component of the child. You will most likely encounter this warning when loading a scene as a child of a pre-existing [`Entity`] that does not have the proper components. [`ComputedVisibility`]: https://docs.rs/bevy/*/bevy/render/view/struct.ComputedVisibility.html [`GlobalTransform`]: https://docs.rs/bevy/*/bevy/transform/components/struct.GlobalTransform.html [`Transform`]: https://docs.rs/bevy/*/bevy/transform/components/struct.Transform.html [`Parent`]: https://docs.rs/bevy/*/bevy/hierarchy/struct.Parent.html [`Entity`]: https://docs.rs/bevy/*/bevy/ecs/entity/struct.Entity.html [`SpatialBundle`]: https://docs.rs/bevy/*/bevy/render/prelude/struct.SpatialBundle.html [`TransformBundle`]: https://docs.rs/bevy/*/bevy/transform/struct.TransformBundle.html