Ue5C++加载UI
ue5加载ui和ue4略有不同,创建UIApI->CreateWidget有一些改动。
template <typename WidgetT = UUserWidget, typename OwnerT = UObject>
WidgetT* CreateWidget(OwnerT* OwningObject, TSubclassOf<UUserWidget> UserWidgetClass = WidgetT::StaticClass(), FName WidgetName = NAME_None)
{
static_assert(TIsDerivedFrom<WidgetT, UUserWidget>::IsDerived, "CreateWidget can only be used to create UserWidget instances. If creating a UWidget, use WidgetTree::ConstructWidget.");
static_assert(TIsDerivedFrom<OwnerT, UWidget>::IsDerived
|| TIsDerivedFrom<OwnerT, UWidgetTree>::IsDerived
|| TIsDerivedFrom<OwnerT, APlayerController>::IsDerived
|| TIsDerivedFrom<OwnerT, UGameInstance>::IsDerived
|| TIsDerivedFrom<OwnerT, UWorld>::IsDerived, "The given OwningObject is not of a supported type for use with CreateWidget.");
SCOPE_CYCLE_COUNTER(STAT_CreateWidget);
if (OwningObject)
{
return Cast<WidgetT>(UUserWidget::CreateWidgetInstance(*OwningObject, UserWidgetClass, WidgetName));
}
return nullptr;
}
两个模板参数需要传UUserWidgetUI类型和归属者类型,同时static_assert会判定两个模板类型是否符合规则。在ue4的时候归属者传this就可以了,这个有区别于ue4;
{
auto uw= CreateWidget<UUserWidget,UWorld>(GetWorld(),hud); //hud是TSubclassOf<UUserWidget>类型
if(uw)
{
uw->AddToViewport();
uw->SetVisibility(ESlateVisibility::Visible);
}
}
添加umg需要的模块后使用这块代码就可以加载UI.
移除UI(2022/12/22新增)
void Ahha::UIRemove(UUserWidget* ui)
{
ui->RemoveFromViewport();
}

浙公网安备 33010602011771号