有时候我们用C++定义了一个对象的类,而其他人员又可能在此类之上创建了蓝图类并进行了修改,那么如何在运行时获取到那个蓝图子类,又如何创建对象呢?
假定我们有个基类叫 MyHTCHandle ,基于此创建的蓝图类为 BP_Handle ,在这个蓝图类里可能会有其他设计人员进行了修改。
我们可以使用 ConstructorHelpers::FObjectFinder 来获取蓝图的类,从而使用 SpawnActor 创建 Actor ;
只需要加入如下代码:
static ConstructorHelpers::FObjectFinder<UClass> MyHandle(TEXT("Class'/Game/MyBlueprint/BP_Handle.BP_Handle_C'"));
if (MyHandle.Object)
{
TSubclassOf<AMyHTCHandle> MyBPHandle = (UClass*)MyHandle.Object;
GetWorld()->SpawnActor<AMyHTCHandle>(MyBPHandle , FVector(0), FRotator(0));
}
其中, ConstructorHelpers::FObjectFinder<UClass> 只能用于构造函数中。
关于这句 Class'/Game/MyBlueprint/BP_Handle.BP_Handle_C' ,可以在编辑器中找到该蓝图类,然后使用右键复制引用,
当然这时候得到的字符串 Blueprint'/Game/MyBlueprint/BP_Handle.BP_Handle' 其实指向的是蓝图类,如果要使用到它在C++中的类型就要稍微修改一下。