是否可以在不直接通过线程本地系统使用“世界”的情况下将一个或多个子代添加到实体?

问题描述

我有一个Entity一个Bundle一个Components,我想附加到一个实体,该实体将成为第一个实体的子代。我可以使用Commands生成带有其组件的实体,但是我无法获得实际的Entity,这意味着我不能直接构造Children组件。如果我使用World资源并使系统线程本地化,则可以在生成它的子实体时获取我的子实体的Entity,然后使用它来构成Child组件,并将其添加到第一个实体。我无法使线程本地系统正常工作,它们似乎对于应该是一个简单而通用的操作来说过于矫kill过正。

我可以使用常规系统将子实体添加到另一个实体吗?

需要澄清的是,这是我理想的语法:

fn add_children(mut commands: Commands,entity: &Entity) {
    commands.add_children(*entity,ComponentBundle::default());

    // maybe also

    commands.add_child(*entity,Component::default());
}

解决方法

我找到了答案。您首先使用commands.spawn(...)生成实体,然后使用commands.current_entity().unwrap()抓取该实体(如果失败则不知道怎么办),然后commands.push_children(entity,&[children])添加子代。