如何解决如何将子代生成到现有组件中?
假设我有这样的东西:
use bevy::prelude::*;
// Bevy style tag
struct &CharacterBox;
// Somewhere to store the entity
pub struct Action {
pub character_box: Option<Entity>,};
fn setup( mut commands: Commands,mut action: ResMut<Action> ) {
if let Some(entity) = commands
.spawn(UiCameraComponents::default())
.spawn(NodeComponents { /* snip */ })
.with_children(|p| {
p.spawn(ButtonComponents { /* snip,snap */ });
})
.with(CharacterBox)
.current_entity()
{
action.character_box = Some(entity);
}
}
从启动时带有一个或两个按钮的NodeComponents ...
...然后,我想从已添加的系统中添加更多按钮:
fn do_actions(
mut commands: Commands,action: ChangedRes<Action>,mut query: Query<(&CharacterBox,&Children)>,) {
if let Some(entity) = commands
.spawn(ButtonComponents { /* ... */ })
.current_entity()
{
let mut charbox = query.get_mut::<Children>(action.character_box.unwrap()).unwrap();
// I know this is naïve,I know I can't just push in the entity,// but it illustrates my point...
charbox.push(entity); // How do I achieve this?
}
}
如何将生成的实体(组件?)插入到NodeComponents.Children中?
如何将组件生成到现有组件中?
或者如何访问NodeComponents.Children.ChildBuilder?我可以查询ChildBuilders吗?
编辑:已删除的编辑。
解决方法
无论如何,这是我的解决方法:
let parent_entity = action.character_box.unwrap();
let new_entity = commands
.spawn(ButtonComponents { /* ... */ })
.current_entity()
.unwrap();
commands.push_children(parent_entity,&[c]);
(在嵌套NodeComponents
的情况下,我不得不分别生成它们,然后将每个实体推入另一个实体,因为据我所知,仅通过使用{{1 }}。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。