게임/Unreal

[UE5] 캐스팅(Casting)

Nakuri 2023. 1. 29. 23:39
728x90
Cast<To>(From);

언리얼에서는 레벨에 배치되는 모든 클래스가 AActor 클래스를 상속받는다.

또한 개발자가 만들어내는 클래스 역시 AActor 클래스를 상속받는 경우가 많다.

만약 플레이어가 발사체에 충돌했을 때 데미지를 받는 기능을 만든다면 아래와 같이 작성할 수 있다.

 

레벨에 존재는 오브젝트들은 모두 AActor 클래스를 상속받기 때문에, 충돌한 오브젝트의 AActor 클래스를 넘겨준다.

하지만 위와 같이 작성한다면 어떤 오브젝트와 충돌이 발생하더라도 플레이어에게 피격이 발생할 것이다.

따라서 플레이어와 충돌한 오브젝트가 발사체인지 확인하는 작업을 거쳐야한다.

캐스팅을 이용하면 이 문제를 해결할 수 있다.

충돌한 AActor 클래스가 AProjectile로 캐스팅이 되었다면 피격 로직이 수행되고, 아닐 경우 nullptr가 될 것이다.

 

FORCEINLINE To* Cast(From* Src)
{
	return TCastImpl<From, To>::DoCast(Src);
}

FORCEINLINE static To* DoCast( UObject* Src )
{
	return Src && Src->GetClass()->HasAnyCastFlag(TCastFlags<To>::Value) ? (To*)Src : nullptr;
}

내부에선 위와 같이 동작한다.

C-style Casting 후 반환해준다.(const_cast 후 static_cast)

 

참고

캐스팅(형 변환) | 언리얼 4

[언리얼] 언리얼의 Cast 동작 원리

C-Style cast