C++で作成したウィジェットが描画されない

InitializeからNativeConstructまでの間にSlateのポインタが参照されてしまうので、NativeConstructのタイミングでWidgetTreeのRootWidgetを書き換えるのでは遅い、という理解です

WidgetReflectorで参照したところ、NativeConstructで記述した場合は、RootWidgetが見つからなかった場合のためのSSpacerが挿入されていました ( UUserWidget::RebuildWidget を参照のこと)

UUserWidget::Initialize() をオーバーライドし、そこでRootWidget(CanvasPanel)の追加をしてみてください
その他の要素の設定はNativeConstructでOKです


bool UMyUserWidget::Initialize()
{
    bool Result = Super::Initialize();

    if (!HasAnyFlags(RF_ClassDefaultObject))
    {
        RootCanvas = WidgetTree->ConstructWidget<UCanvasPanel>();
        WidgetTree->RootWidget = RootCanvas;
    }

    return Result;
}

void UMyUserWiget::NativeConstruct()
{
    // ...
}

参考:

1 Like