글을 쓰는 목적
액터를 스폰하였는데 삭제되는 경우가 있었다. 특이한 상황이라 기억하기 위해 기록을 남긴다.
작업 환경
UE4.26
원인
액터를 스폰했는데 캐릭터를 스폰하지 못하는 현상이 있었다. 콜스택을 확인해 보니 Actor를 스폰시에는 PostActorConstruction을 호출해주는데 PostActorContrustion에서 스폰 가능한 위치 여부를 확인하여 액터를 스폰한다. 만약 스폰 불가능한 위치로 액터를 스폰을 한다면 곧바로 Destory를 호출하여 액터를 파괴한다.
Cast<ATestCharacter>(GWorld()->SpawnActor(ATestCharacter::StaticClass()));
void AActor::PostActorConstruction()
case ESpawnActorCollisionHandlingMethod::AdjustIfPossibleButDontSpawnIfColliding:
{
// Try to find a spawn position
FVector AdjustedLocation = GetActorLocation();
FRotator AdjustedRotation = GetActorRotation();
if (World->FindTeleportSpot(this, AdjustedLocation, AdjustedRotation))
{
SetActorLocationAndRotation(AdjustedLocation, AdjustedRotation, false, nullptr, ETeleportType::TeleportPhysics);
}
else
{
UE_LOG(LogSpawn, Warning, TEXT("SpawnActor failed because of collision at the spawn location [%s] for [%s]"), *AdjustedLocation.ToString(), *GetClass()->GetName());
Destroy();
}
}
break;
case ESpawnActorCollisionHandlingMethod::DontSpawnIfColliding:
if (World->EncroachingBlockingGeometry(this, GetActorLocation(), GetActorRotation()))
{
UE_LOG(LogSpawn, Warning, TEXT("SpawnActor failed because of collision at the spawn location [%s] for [%s]"), *GetActorLocation().ToString(), *GetClass()->GetName());
Destroy();
}
break;
해결 방법
해결 방법은 스폰 위치 스폰 가능한 위치로 보정해 주면 된다.
'버그' 카테고리의 다른 글
UE4 Visual studio build는 되지만 Console 빌드가 되지 않는 현상 (0) | 2020.08.29 |
---|