0

我在 cpp 中有一个 AActor 类。我创建了一个继承自它的 BP,命名为 My_Actor_BP。在 cpp 类中,我声明了一些 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;

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

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

在此处输入图像描述

在此处输入图像描述

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

4

1 回答 1

2

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

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

/** HUD class this game uses. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Classes, meta = (DisplayName = "HUD Class"))
TSubclassOf<AHUD> HUDClass;
于 2021-09-25T17:38:26.637 回答