【问题标题】:How can I get a List of all UClasses in the project (Blueprint and C++)如何获取项目中所有 UClass 的列表(蓝图和 C++)
【发布时间】:2019-11-08 14:13:36
【问题描述】:

我想获取所有 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,那个问题是因为我找到了那个方法。

【问题讨论】:

  • 我无法理解您的确切问题是什么。您是否在问如何让用户选择一个 UUserWidget 子类,然后在运行时实例化它?我不确定UUserWidget 与获取所有UClass 子类的列表有什么关系。
  • @Ruzihm 我只想获取一个 UClasses 列表,这样我就可以将它放在一个小部件 ComboBox 中,我想如果我从“classesWidget”中获得一个 UUserWidget,那么我可以获得 UClasses 的值(它们应该在 PanelBox 中),但我真正需要的是获取列表,它不需要是 UUserWidget,这个问题是因为我找到了那个方法。
  • TSubClassOf 将免费为您提供一个资产选择器,引擎中还有一个属性视图小部件旨在复制相同的行为,尽管我忘记了名称。

标签: c++ unreal-engine4


【解决方案1】:

我终于放了一个 TObjectIterator,这样我就可以得到我想要的每一个类:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-07
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多