定义
TSubclassOf<ParentClassName> ChildClass_Ins
TSubclassOf 根据父类对象创建其子类实例。然后就可以再将创建的子类对象地址赋值给父类指针。一般用于在代码中创建蓝图子类实例。
具体使用场景例如:
1.Widget创建;Widget若全部使用代码来创建比较复杂,可先使用代码定义所需的空间变量,再派生蓝图类,完成界面编辑。
UPROPERTY(EditAnywhere, Category = "UserWidget")
TSubclassOf<class UCubeViewUIWidget> CubeViewUIWidget_BP;
/*
中间需指定CubeViewUIWidget_BP的定义类型
*/
UCubeViewUIWidget* CubeViewUIWidget;
CubeViewUIWidget = CreateWidget<UCubeViewUIWidget>(GetWorld(), CubeViewUIWidget_BP);
注意
使用TSubclassOf作为某一个类(Class1)的成员变量时,需要指定子类类型(派生类不唯一)。具体方法有两种:
- 在该成员变量暴露给蓝图可编辑,再将该类(Class1)派生出一个蓝图类,再在蓝图类默认值设置中设定CubeViewUIWidget_BP的值,如图:
- 不派生蓝图类,直接在代码中指定子类定位文件地址(需要创建实例的蓝图文件地址):
TSubclassOf<class UCubeViewUIWidget> CubeViewUIWidget_BP;
UCubeViewUIWidget* CubeViewUIWidget;
//从内容浏览器中加载类的定义
static ConstructorHelpers::FClassFinder<UCubeViewUIWidget> WidgetAsset(TEXT("Game/Widget_BP"));
if (WidgetAsset.Succeeded())
{
/** Assign the class of the loaded asset to the WigetClass variable, which is a "subclass" of UUserWidget : Which our asset class is */
CubeViewUIWidget_BP = WidgetAsset.Class;
}
CubeViewUIWidget = CreateWidget<UCubeViewUIWidget>(GetWorld(), CubeViewUIWidget_BP);
其中:TEXT("Game/Widget_BP")为内容浏览器中的蓝图文件的位置,可右击文件<复制引用>获取。