当我动态创建/实例化从UUserWidget
派生的UMG小部件时,我使用CreateWidget
。但是,这不适用于panels UWrapBox
:
TSubclassOf<UWrapBox> WrapBoxClass; // Assigned in Unreal Engine Editor.
auto wrapBox = CreateWidget<UWrapBox>(GetOwningPlayer(), WrapBoxClass);
// -> Error CreateWidget can only be used on UUserWidget children.
UPanelWidget* parent;
parent->AddChild(wrapBox);
由于我不想将面板包装到UserWidget中(这可以作为解决方法),我使用NewObject
:
auto wrapBox = NewObject<UWrapBox>();
UPanelWidget* parent;
parent->AddChild(wrapBox);
在编辑器中进行测试时,这似乎有效,但CreateWidget
检查APlayerController
是否为本地,设置PlayerContext
并分配外部对象。 NewObject
没有发生这种情况。 UWidgetTree::ConstructWidget
也使用NewObject
进行创作。
所以我的问题:
NewObject()
时,我有什么副作用
创建小部件?