Unreal Editor 编辑状态获取所有Widget

Unreal Editor 编辑状态获取所有Widget

问题由来

  • 需要编辑状态修改Widget
  • UWidgetBlueprint引用自定义的UWidgetBlueprint
  • UUserWidget的UWidgetTree变量在编辑状态为空 导致获取不到子对象

解决流程

  • 尝试了很多方法
  • 通过断点查看发现Widget的基类UObjectBase有ClassPrivate这个变量包含UUserWidget的UWidgetTree数据
  • ClassPrivate可以通过GetClass()获取

解决方法

UPackage* Package = xxx;
UObject* Asset = Package->FindAssetInPackage();
UWidgetBlueprint* WidgetBlueprint = Cast<UWidgetBlueprint>(Asset);
TArray<UWidget*> ChildWidgets = WidgetBlueprint->GetAllSourceWidgets();

for (UWidget* ChildWidget : ChildWidgets)
{
    UWidgetBlueprintGeneratedClass* WidgetBlueprintGeneratedClass = Cast<UWidgetBlueprintGeneratedClass>(ChildWidget->GetClass());
    if (WidgetBlueprintGeneratedClass)
    {
        TArray<UWidget*> DescendantsWidgets;
        WidgetBlueprintGeneratedClass->GetWidgetTreeArchetype()->GetAllWidgets(DescendantsWidgets);
        for (UWidget* DescendantsWidget : DescendantsWidgets)
        {
        }
    }
}
posted @   邹强  阅读(448)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示