Когда я динамически создаю / создаю экземпляры UMG-виджетов, которые являются производными от UUserWidget
, Я использую CreateWidget
, Однако это не работает для панели лайк 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);
Поскольку я не хочу оборачивать панель в пользовательский виджет (который будет работать как обходной путь), я использую NewObject
:
auto wrapBox = NewObject<UWrapBox>();
UPanelWidget* parent;
parent->AddChild(wrapBox);
Это похоже на работу при тестировании в редакторе, однако CreateWidget
проверяет, если APlayerController
является локальным, устанавливает PlayerContext
и назначает внешний объект. Ничего из этого не происходит с NewObject
, UWidgetTree::ConstructWidget
также использует NewObject
для создания.
Итак, мои вопросы:
NewObject()
заЗадача ещё не решена.
Других решений пока нет …