如何获得项目中所有 UClass 的列表(蓝图和 C++)
How can I get a List of all UClasses in the project (Blueprint and C++)
我想获取所有 UClass 的列表。
我试图在 ClassViewer 中搜索,但它给了我一个 SWidget,所以我不知道如何从中获取 UUserWidget*。
FClassViewerModule& ClassViewerModule = FModuleManager::LoadModuleChecked<FClassViewerModule>("ClassViewer");
FClassViewerInitializationOptions initClassViewer = FClassViewerInitializationOptions();
FOnClassPicked onClassPicked = FOnClassPicked();
TSharedRef<SWidget> classesWidget = ClassViewerModule.CreateClassViewer(initClassViewer, onClassPicked);
如果我无法从该 SWidget 中获取 UUserWidget*,是否有其他方法获取项目中当前创建的所有 UClass 的列表?
编辑
我只想得到一个 UClasses 列表,这样我就可以把它放在一个小部件 ComboBox 中,我想如果我从 "classesWidget" 得到一个 UUserWidget,那么我就可以得到 UClasses 的值(它们应该是在 PanelBox 中),但我真正需要的是获取列表,它不需要是 UUserWidget,这个问题是因为我找到了那个方法。
我终于放了一个 TObjectIterator 这样我就可以得到我想要的每个 class:
for (TObjectIterator<UClass> It; It; ++It)
{
if (It->IsChildOf(AActor::StaticClass()) || It->IsChildOf(APawn::StaticClass()) || It->IsChildOf(ACharacter::StaticClass()))
{
actorClasses.Add(*It);
}
else if (It->IsChildOf(USceneComponent::StaticClass()))
{
componentClasses.Add(*It);
}
else if (It->IsChildOf(UUserWidget::StaticClass()))
{
widgets.Add(*It);
}
}
我想获取所有 UClass 的列表。
我试图在 ClassViewer 中搜索,但它给了我一个 SWidget,所以我不知道如何从中获取 UUserWidget*。
FClassViewerModule& ClassViewerModule = FModuleManager::LoadModuleChecked<FClassViewerModule>("ClassViewer");
FClassViewerInitializationOptions initClassViewer = FClassViewerInitializationOptions();
FOnClassPicked onClassPicked = FOnClassPicked();
TSharedRef<SWidget> classesWidget = ClassViewerModule.CreateClassViewer(initClassViewer, onClassPicked);
如果我无法从该 SWidget 中获取 UUserWidget*,是否有其他方法获取项目中当前创建的所有 UClass 的列表?
编辑
我只想得到一个 UClasses 列表,这样我就可以把它放在一个小部件 ComboBox 中,我想如果我从 "classesWidget" 得到一个 UUserWidget,那么我就可以得到 UClasses 的值(它们应该是在 PanelBox 中),但我真正需要的是获取列表,它不需要是 UUserWidget,这个问题是因为我找到了那个方法。
我终于放了一个 TObjectIterator 这样我就可以得到我想要的每个 class:
for (TObjectIterator<UClass> It; It; ++It)
{
if (It->IsChildOf(AActor::StaticClass()) || It->IsChildOf(APawn::StaticClass()) || It->IsChildOf(ACharacter::StaticClass()))
{
actorClasses.Add(*It);
}
else if (It->IsChildOf(USceneComponent::StaticClass()))
{
componentClasses.Add(*It);
}
else if (It->IsChildOf(UUserWidget::StaticClass()))
{
widgets.Add(*It);
}
}