如何在运行时将 UiWidget 创建为实体?

How do I create a UiWidget at runtime as an entity?

假设我创建了一个容器

let created = UiWidget::Container::<NoCustomUi, String, ()> {
    transform: UiTransformData::default(),
    background: None,
    children: Vec::new(),
};

如何将它添加到世界并取回它的实体?类似于:

let entity = world
    .create_entity()
    .with(container)
    .build();

但是它说“特征 specs::world::comp::Component 没有为 amethyst_ui::prefab::UiWidget<amethyst_ui::prefab::NoCustomUi, std::string::String> 实现”。

我正在使用 Amethyst v0.15

UiWidget 实际上不能直接添加到 Entity,因为它是通过 Prefab

加载的

您必须从实现 Componentamethyst::ui 创建 UiTransform, UiText 或少数其他 Struct 之一,并将它们添加到 Entity

let ui_transform = UiTransform::new(
    String::from("demo_text"),   // id
    Anchor::Middle,              // anchor
    Anchor::Middle,              // pivot
    0f32,                        // x
    0f32,                        // y
    0f32,                        // z
    100f32,                      // width
    30f32,                       // height
);

let ui_text = UiText::new(
    font_handle,                 // font
    String::from("Hello World"), // text
    [1.0, 1.0, 1.0, 0.5],        // color
    25f32,                       // font_size
    LineMode::Single,            // line mode
    Anchor::Middle,              // alignment
);

world.create_entity()
    .with(ui_transform)
    .with(ui_text)
    .build();

您可以在 User Interface section.

下的 Amethyst 一书中找到有关如何执行此操作的更多信息