C++ 生成蓝图类对象

获取蓝图资源路径

在UE中右键资源,选择Copy Reference即可,后续用到的路径、Name都是取自于此 文章后续中将此抽象为“AssetName”

  1. 材质:
    static ConstructorHelpers::FObjectFinder<UMaterial> MMaterialAsset(TEXT(AssetName));
    if (MMaterialAsset.Succeeded())
    {
        //使用材质:MMaterialAsset.Object
    }
  1. ChildComponent:
    //假设蓝图类的父类为BPP
    UObject* loadObj = StaticLoadObject(UBlueprint::StaticClass(), NULL, TEXT(Name));
    if (loadObj != nullptr)
    {
        UBlueprint* ubp = Cast<UBlueprint>(loadObj);
		TSubclassOf<BPP> MyComponent = ubp->GeneratedClass;

        //如果是要实例化它
        BPP* sss  = static_cast<AOrbitCameraBase*>(CreateDefaultSubobject(TEXT("The Name"), BPP::StaticClass(), MyComponent,false, false));

        //如果是一个actor,要将其作为子Actor:
        UChildActorComponent* childActor = CreateDefaultSubobject<UChildActorComponent>(TEXT("InventoryCamera"));
        childActor->SetChildActorClass(MyComponent);
        childActor->SetupAttachment(RootComponent);

        //如果这蓝图类本来就是一个Component,实例化直接attach即可

        //新建一个的另一种方法, 不可在构造器中运行
        FActorSpawnParameters SpawnInfo;
        SpawnInfo.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
        BPP* actor = GWorld->SpawnActor<BPP>(MyComponent, SpawnInfo);
    }