C++中建立一个Level并添加的Runtime当中html
Level.Add(GetWorld()->SpawnActor<ABuildingModLevel>());
C++中Spawn一个基于蓝图的Actor函数
https://answers.unrealengine.com/questions/60897/spawn-actorobject-from-code.htmui
Here is how I spawn a blueprint via C++. Note that the blueprint I spawn has a base class that was created in C++ also.this
.hspa
TSubclassOf<YourClass> BlueprintVar; // YourClass is the base class that your blueprint uses
.cpp(注意,这段代码必须放在构造函数中。UE4其余类型的蓝图,好比Widget蓝图,均可以经过下面这种方式加载。)code
ClassThatWillSpawnTheBlueprint::ClassThatWillSpawnTheBlueprint(const class FPostConstructInitializeProperties& PCIP) : Super(PCIP) { static ConstructorHelpers::FObjectFinder<UBlueprint> PutNameHere(TEXT("Blueprint'/Path/To/Your/Blueprint/BP.BP'")); if (PutNameHere.Object) { BlueprintVar = (UClass*)PutNameHere.Object->GeneratedClass; } }
PutNameHere
is just an arbitrary name you give to the constructor helper. The path to your blueprint is found by finding your blueprint in the content browser, right clicking it, and choosing Copy Reference
. Then, just paste that in between the quotes.htm
Now, you're ready to spawn the blueprint. You can do it in BeginPlay() or wherever, just not in the constructor.(这段代码必须放在非构造函数中,好比BeginPlay()中)blog
UWorld* const World = GetWorld(); // get a reference to the world if (World) { // if world exists YourClass* YC = World->SpawnActor<YourClass>(BlueprintVar, SpawnLocation, SpawnRotation); }
If you don't know your SpawnLocation or SpawnRotation you can just throw in FVector(0,0,0) and FRotator(0,0,0) instead.get
So, since your blueprint base class was also created in C++ this makes it easy to interact with your blueprint from code. It's as simple as YC->SomeVariable = SomeValue
. Hope that helps.it
APuzzleBlock* NewBlock = GetWorld()->SpawnActor<APuzzleBlock>(BlockLocation, FRotator(0,0,0));