SpawnActorDeferred和SpawnActorOfClass都是用于生成 Actor 的函数,但它们的使用场景和行为有显著区别:
生成时机与初始化控制:
SpawnActorOfClass:是一个 "一站式" 函数,调用后会立即完成 Actor 的生成、初始化并激活。所有构造函数、BeginPlay等生命周期函数会被自动调用。
SpawnActorDeferred:生成一个 "延迟激活" 的 Actor,它会创建 Actor 但不会立即初始化或激活。这允许你在 Actor 正式激活前手动设置一些属性(如变量、组件等)。
总结来说,选择哪个函数取决于你是否需要在 Actor 完全激活前进行自定义初始化。如果需要精细控制初始化过程,使用SpawnActorDeferred;如果只需要简单生成 Actor,SpawnActorOfClass更合适。
SpawnActorOfClass
AActor* NewActor = GetWorld()->SpawnActorOfClass(AActorClass::Static Class(), SpawnTransform);
SpawnActorDeferred
AActor* NewActor = GetWorld()->SpawnActorDeferred<AActorClass>(AActorClass::StaticClass(), SpawnTransform); if (NewActor) { // 在激活前设置属性 NewActor->SomeVariable = SomeValue; // 完成生成流程 NewActor->FinishSpawning(SpawnTransform); }