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();
}

 

posted @   过往云烟吧  阅读(677)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示