作用
动态创建Actor
说明
每个Level持有一个TArray<AActor*> Actors,它用于存放关卡内的所有Actor,因此关卡实际上是一个Actor容器。如果你有看过SpawnActor方法(所有Actor都会经过该方法创建)的代码就一目了然了,它会将创建的Actor放入Level的Actors容器内。
代码
AActor* UWorld::SpawnActor( UClass* Class, FTransform const* UserTransformPtr, const FActorSpawnParameters& SpawnParameters )
{
ULevel* CurrentLevel = PersistentLevel;
ULevel* LevelToSpawnIn = SpawnParameters.OverrideLevel;
if (LevelToSpawnIn == NULL)
{
// 如果没有传入指定的关卡,就会指定CurrentLevel.
LevelToSpawnIn = (SpawnParameters.Owner != NULL) ? SpawnParameters.Owner->GetLevel() : CurrentLevel;
}
// 真正创建actor的地方
AActor* const Actor = NewObject<AActor>(LevelToSpawnIn, Class, NewActorName, ActorFlags, Template, false/*bCopyTransientsFromClassDefaults*/, nullptr/*InInstanceGraph*/, ExternalPackage);
//Add到Level的Actors容器中
LevelToSpawnIn->Actors.Add(Actor);
return Actor;
}