Unreal Engine 5의 Cast<>
와 CastChecked<>
는 두 가지 주요 캐스팅 함수입니다. 둘 다 특정 타입으로 안전하게 형변환하는데, 사용 목적과 동작 방식이 다릅니다. 각각의 특성과 예제 코드들을 살펴보겠습니다.
Cast<>
Cast<>
는 안전한 형변환을 수행하는 함수로, 캐스팅이 성공하면 변환된 객체를 반환하고, 실패하면 nullptr
을 반환합니다. 이는 캐스팅의 성공 여부를 체크해야 하는 상황에서 주로 사용됩니다.
nullptr
을 반환하므로 프로그램이 크래시 되지 않음.AActor* MyActor = GetSomeActor();
AMyCharacter* MyCharacter = Cast<AMyCharacter>(MyActor);
if (MyCharacter)
{
// 캐스팅 성공: MyCharacter로 작업을 수행합니다.
MyCharacter->DoSomething();
}
else
{
// 캐스팅 실패: 다른 처리 로직을 수행하거나 무시합니다.
UE_LOG(LogTemp, Warning, TEXT("캐스팅 실패"));
}
위 코드에서는 Cast<>
를 통해 MyActor
를 AMyCharacter
타입으로 변환을 시도하며, 캐스팅이 실패할 경우 nullptr
이 반환되므로 안전하게 확인할 수 있습니다.
CastChecked<>
CastChecked<>
는 캐스팅 실패 시 예외가 발생하도록 하여, 실패할 가능성이 낮거나 실패 시 즉시 프로그램을 종료해야 하는 경우에 적합합니다. 실패하면 checkf()
를 호출하여 디버그 모드에서는 디버깅 창에서 경고를 확인할 수 있습니다.
AActor* MyActor = GetSomeActor();
AMyCharacter* MyCharacter = CastChecked<AMyCharacter>(MyActor);
// 반드시 성공하는 캐스팅이므로 이후 코드에서 MyCharacter를 안전하게 사용할 수 있습니다.
MyCharacter->DoSomething();
CastChecked<>
는 반드시 성공해야 하는 캐스팅 상황에 적합하며, 디버깅 중에는 캐스팅 실패 시 오류 메시지를 확인할 수 있습니다. Cast<>
와 달리 실패 시 nullptr
을 반환하지 않고 즉시 예외를 던지므로 오류 원인을 빠르게 확인할 수 있습니다.
특성 | Cast<> | CastChecked<> |
---|---|---|
반환 값 | 성공 시 타입 변환, 실패 시 nullptr | 성공 시 타입 변환, 실패 시 예외 발생 |
실패 시 안전성 | nullptr 반환, 안전하게 체크 가능 | 실패 시 프로그램이 종료됨 |
사용 용도 | 실패 가능성이 있거나 예외 처리가 필요할 때 | 실패 가능성이 거의 없고, 반드시 성공해야 할 때 |
Cast<>
사용 예시
Cast<>
를 사용하여 확인 후 아이템으로 변환합니다.AActor* HitActor = LineTrace(); // 라인트레이스로 얻은 객체
APickupItem* Pickup = Cast<APickupItem>(HitActor);
if (Pickup)
{
Pickup->Collect();
}
else
{
UE_LOG(LogTemp, Warning, TEXT("이 객체는 아이템이 아닙니다."));
}
CastChecked<>
사용 예시
CastChecked<>
를 사용하여 강력한 타입 확인을 할 수 있습니다.AActor* PlayerActor = GetWorld()->GetFirstPlayerController()->GetPawn();
AMyPlayerCharacter* PlayerCharacter = CastChecked<AMyPlayerCharacter>(PlayerActor);
// 반드시 성공해야 하므로 PlayerCharacter로 바로 접근 가능합니다.
PlayerCharacter->StartMission();