# Objective The migration process for `bevy_color` (#12013) will be fairly involved: there will be hundreds of affected files, and a large number of APIs. ## Solution To allow us to proceed granularly, we're going to keep both `bevy_color::Color` (new) and `bevy_render::Color` (old) around until the migration is complete. However, simply doing this directly is confusing! They're both called `Color`, making it very hard to tell when a portion of the code has been ported. As discussed in #12056, by renaming the old `Color` type, we can make it easier to gradually migrate over, one API at a time. ## Migration Guide THIS MIGRATION GUIDE INTENTIONALLY LEFT BLANK. This change should not be shipped to end users: delete this section in the final migration guide! --------- Co-authored-by: Alice Cecile <alice.i.cecil@gmail.com>
4 KiB
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:
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:
use bevy::prelude::*;
// WARNING: this code is buggy
fn setup_cube(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<StandardMaterial>>,
) {
commands
.spawn(TransformBundle::default())
.with_children(|parent| {
// cube
parent.spawn(PbrBundle {
mesh: meshes.add(Cuboid::default()),
material: materials.add(LegacyColor::rgb(0.8, 0.7, 0.6)),
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 ViewVisibility
or InheritedVisibility
component.
Since the cube is spawned as a child of an entity without the
visibility components, it will not be visible at all.
To fix this, you must use SpatialBundle
over TransformBundle
,
as follows:
use bevy::prelude::*;
fn setup_cube(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<StandardMaterial>>,
) {
commands
// We use SpatialBundle instead of TransformBundle, it contains the
// visibility components 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(Cuboid::default()),
material: materials.add(LegacyColor::rgb(0.8, 0.7, 0.6)),
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.