1. SpawnActor传参
做项目过程中发现先SpawnActor再传参会先运行 生成的Actor的BeginPlay然后才进行传参。可是我在BeginPlay时就需要用到参数做操作了。
发生情况时代码如下:
if (BaseCharactor = GetWorld()->SpawnActor<ABaseCharactor>(NewClass, CharactorLocation, CharactorRotatation))
{
BaseCharactor->ID = ID;
}
解决方法:
后来发现UGamePlayStatic中也预留了一个生成Actor方法—>BeginDeferredActorSpawnFromClass和完成生成方法—>FinishSpawningActor。在这中间我们就可以传参了。
修改一下代码:
UClass *NewClass = CharactorData->CharactorBlueprintKey.LoadSynchronous(); // 加载table中角色蓝图
if (GetWorld() && NewClass)
{
FTransform TmpSpawnTransform;
TmpSpawnTransform.SetLocation(CharactorLocation);
TmpSpawnTransform.SetRotation(CharactorRotatation.Quaternion());
if (ABaseCharactor* BaseCharactor = Cast<ABaseCharactor>(UGameplayStatics::BeginDeferredActorSpawnFromClass(GetWorld(), NewClass, TmpSpawnTransform)))
{
BaseCharactor->ID = CharactorID; // 这里调用类中函数或者赋值
AddCharactorData(BaseCharactor->ID, *CharactorData);
UGameplayStatics::FinishSpawningActor(BaseCharactor, TmpSpawnTransform);
return BaseCharactor;
}
}