【UE5】C++ 关于CreateWidget函数的使用注意事项

文章介绍了UserWidget.h中的CreateWidget函数,强调它仅用于创建UserWidget实例,且要求OwningObject必须是支持类型(如UWidget、UWidgetTree等)。特别指出,源码版UE才支持在特定类中使用,例如PlayerController,以实现通过角色打开商店的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
在这里插入图片描述
这是UserWidget.h里关于CreateWidget函数的介绍

WidgetT* CreateWidget(OwnerType 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<TPointedToType<OwnerType>, UWidget>::IsDerived
		|| TIsDerivedFrom<TPointedToType<OwnerType>, UWidgetTree>::IsDerived
		|| TIsDerivedFrom<TPointedToType<OwnerType>, APlayerController>::IsDerived
		|| TIsDerivedFrom<TPointedToType<OwnerType>, UGameInstance>::IsDerived
		|| TIsDerivedFrom<TPointedToType<OwnerType>, UObject>::IsDerived//自己加的
		|| TIsDerivedFrom<TPointedToType<OwnerType>, UClass>::IsDerived//自己加的,改了没用,不编译,必须用编码版UE。需要200G磁盘
		|| TIsDerivedFrom<TPointedToType<OwnerType>, UWorld>::IsDerived, "The given OwningObject is not of a supported type for use with CreateWidget.");
	
	
	SCOPE_CYCLE_COUNTER(STAT_CreateWidget);
	FScopeCycleCounterUObject WidgetObjectCycleCounter(UserWidgetClass, GET_STATID(STAT_CreateWidget));

	if (OwningObject)
	{
		return Cast<WidgetT>(UUserWidget::CreateWidgetInstance(*OwningObject, UserWidgetClass, WidgetName));
	}
	return nullptr;
}
	

自己加了两句,必须源码版才能编译,安装版的UE是不能在普通Actor、Charactor等类里使用这个函数的,只能在UWidget、UWidgetTree、APlayerController、UGameInstance、UWorld类里使用。所以如果想通过一个人物打开一个商店UserWidget,最好额外写一个PlayerController类,才能使用这个函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值