Struct ChildOf
pub struct ChildOf(pub Entity);Expand description
Stores the parent entity of this child entity with this component.
This is a Relationship component, and creates the canonical
“parent / child” hierarchy. This is the “source of truth” component, and it pairs with
the Children RelationshipTarget.
This relationship should be used for things like:
- Organizing entities in a scene
- Propagating configuration or data inherited from a parent, such as “visibility” or “world-space global transforms”.
- Ensuring a hierarchy is despawned when an entity is despawned.
ChildOf contains a single “target” Entity. When ChildOf is inserted on a “source” entity,
the “target” entity will automatically (and immediately, via a component hook) have a Children
component inserted, and the “source” entity will be added to that Children instance.
If the ChildOf component is replaced with a different “target” entity, the old target’s Children
will be automatically (and immediately, via a component hook) be updated to reflect that change.
Likewise, when the ChildOf component is removed, the “source” entity will be removed from the old
target’s Children. If this results in Children being empty, Children will be automatically removed.
When a parent is despawned, all children (and their descendants) will also be despawned.
You can create parent-child relationships in a variety of ways. The most direct way is to insert a ChildOf component:
let root = world.spawn_empty().id();
let child1 = world.spawn(ChildOf(root)).id();
let child2 = world.spawn(ChildOf(root)).id();
let grandchild = world.spawn(ChildOf(child1)).id();
assert_eq!(&**world.entity(root).get::<Children>().unwrap(), &[child1, child2]);
assert_eq!(&**world.entity(child1).get::<Children>().unwrap(), &[grandchild]);
world.entity_mut(child2).remove::<ChildOf>();
assert_eq!(&**world.entity(root).get::<Children>().unwrap(), &[child1]);
world.entity_mut(root).despawn();
assert!(world.get_entity(root).is_err());
assert!(world.get_entity(child1).is_err());
assert!(world.get_entity(grandchild).is_err());However if you are spawning many children, you might want to use the EntityWorldMut::with_children helper instead:
let mut child1 = Entity::PLACEHOLDER;
let mut child2 = Entity::PLACEHOLDER;
let mut grandchild = Entity::PLACEHOLDER;
let root = world.spawn_empty().with_children(|p| {
child1 = p.spawn_empty().with_children(|p| {
grandchild = p.spawn_empty().id();
}).id();
child2 = p.spawn_empty().id();
}).id();
assert_eq!(&**world.entity(root).get::<Children>().unwrap(), &[child1, child2]);
assert_eq!(&**world.entity(child1).get::<Children>().unwrap(), &[grandchild]);Tuple Fields§
§0: EntityImplementations§
Trait Implementations§
§impl Component for ChildOf
impl Component for ChildOf
§const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
§type Mutability = Immutable
type Mutability = Immutable
Component<Mutability = Mutable>,
while immutable components will instead have Component<Mutability = Immutable>. Read more§fn register_required_components(
_requiree: ComponentId,
required_components: &mut RequiredComponentsRegistrator<'_, '_>,
)
fn register_required_components( _requiree: ComponentId, required_components: &mut RequiredComponentsRegistrator<'_, '_>, )
§fn on_discard() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_discard() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
§fn clone_behavior() -> ComponentCloneBehavior
fn clone_behavior() -> ComponentCloneBehavior
§fn map_entities<M>(this: &mut ChildOf, mapper: &mut M)where
M: EntityMapper,
fn map_entities<M>(this: &mut ChildOf, mapper: &mut M)where
M: EntityMapper,
EntityMapper. This is used to remap entities in contexts like scenes and entity cloning.
When deriving Component, this is populated by annotating fields containing entities with #[entities] Read more§fn relationship_accessor() -> Option<ComponentRelationshipAccessor<ChildOf>>
fn relationship_accessor() -> Option<ComponentRelationshipAccessor<ChildOf>>
ComponentRelationshipAccessor] required for working with relationships in dynamic contexts. Read more§fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
§impl FromWorld for ChildOf
impl FromWorld for ChildOf
§fn from_world(_world: &mut World) -> ChildOf
fn from_world(_world: &mut World) -> ChildOf
Self using data from the given World.§impl Relationship for ChildOf
impl Relationship for ChildOf
§const ALLOW_SELF_REFERENTIAL: bool = false
const ALLOW_SELF_REFERENTIAL: bool = false
true, a relationship is allowed to point to its own entity. Read more§type RelationshipTarget = Children
type RelationshipTarget = Children
Component added to the “target” entities of this [Relationship], which contains the list of all “source”
entities that relate to the “target”.§fn set_risky(&mut self, entity: Entity)
fn set_risky(&mut self, entity: Entity)
Entity ID of the entity containing the RelationshipTarget to another one. Read more§fn on_discard(world: DeferredWorld<'_>, _: HookContext)
fn on_discard(world: DeferredWorld<'_>, _: HookContext)
impl Eq for ChildOf
impl StructuralPartialEq for ChildOf
impl Unpin for ChildOfwhere
[()]: for<'a> SpecializeFromTemplate,
Auto Trait Implementations§
impl Freeze for ChildOf
impl RefUnwindSafe for ChildOf
impl Send for ChildOf
impl Sync for ChildOf
impl UnsafeUnpin for ChildOf
impl UnwindSafe for ChildOf
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere
C: Component,
fn component_ids( components: &mut ComponentsRegistrator<'_>, ) -> impl Iterator<Item = ComponentId> + use<C>
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> DynEq for T
impl<T> DynEq for T
§impl<C> DynamicBundle for Cwhere
C: Component,
impl<C> DynamicBundle for Cwhere
C: Component,
§unsafe fn get_components(
ptr: MovingPtr<'_, C>,
func: &mut impl FnMut(StorageType, OwningPtr<'_>),
) -> <C as DynamicBundle>::Effect
unsafe fn get_components( ptr: MovingPtr<'_, C>, func: &mut impl FnMut(StorageType, OwningPtr<'_>), ) -> <C as DynamicBundle>::Effect
§unsafe fn apply_effect(
_ptr: MovingPtr<'_, MaybeUninit<C>>,
_entity: &mut EntityWorldMut<'_>,
)
unsafe fn apply_effect( _ptr: MovingPtr<'_, MaybeUninit<C>>, _entity: &mut EntityWorldMut<'_>, )
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.