UE4在BP编辑器中添加继承自UUserwidget的Widget Class BP?

UE4 add Widget Class BP which inherits from UUserwidget in BP Editor?

我在 cpp 中有一个 AActor class。我创建了一个 BP 继承自它命名为 My_Actor_BP。在 cpp class 中我声明了一些 UPROPERTY :

UPROPERTY(EditAnywhere, Category = "Event Section")
    TArray<UUserWidget*> Event_Dispatcher_0;
UPROPERTY(EditAnywhere, Category = "Event Section")
    TArray<UUserWidget*> Event_Dispatcher_1;
UPROPERTY(EditAnywhere, Category = "Event Section")
    TArray<UUserWidget*> Event_Dispatcher_2;
UPROPERTY(EditAnywhere, Category = "Event Section")
    TArray<UUserWidget*> Event_Dispatcher_3;

我想在其中包含一些自定义的小部件。不得不说,这些自定义的widgets都是BPclasses,继承自不同的cppclasses。而这些所有不同的 cpp classes 都继承自 UUserWidget class。通过这种方式,我的艺术家可以实现他的小部件 BP。我可以在 cpp 函数中使用它们。到目前为止一切顺利。

当我检查 My_Actor_BP 中的“事件部分”并将一个新元素添加到 Event_Dispatcher_0 数组时,元素正在添加,但是当我尝试选择资产时,那里将是空的。没有推荐的 BP 或任何东西。

可能是零推荐的原因是TArray的模板类型。当我直接从 UUserWidget 创建一个 BP class 时,仍然没有答案。这种类型应该是什么?任何建议都会很棒。提前致谢。

如果您希望用户指定一个对象的 class 由另一个对象管理,您需要使用 TSubclassOf<> 模板。在上面的代码中,您要求 属性 指向一个演员,但该演员尚未创建。您要做的是指向 class,然后您可以在蓝图或本机代码中从 class 创建小部件。

GameModeBase.h 的来源给出了很好的例子:

/** HUD class this game uses. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Classes, meta = (DisplayName = "HUD Class"))
TSubclassOf<AHUD> HUDClass;