
프로그래밍 작업을 할 때 캐스팅, 즉 형 변환은 상당히 중요하고 자주 쓰이는 것이다
특히 여러 클래스가 상속으로 엮여있는 상황이라면 더더욱 중요해진다
언리얼 엔진에서는 레벨에 배치되는 모든 클래스가 AActor 클래스를 상속받고 있고, 개발자가 만들어내는 클래스 역시 상당수는 AActor 클래스를 상속받게 된다
그렇기 때문에 몇몇 함수들에서는 메인이 되는 부모 클래스를 매개변수로 받거나 돌려준다
간단한 예시를 들기 위해서 프로젝트를 생성하고 Actor 클래스를 상속받아서 Projectile이라는 클래스를 생성한다
Actor 클래스를 상속받아서 Projectile이름의 클래스와 Projectile 투사체와 상호작용할 MyActor 클래스도 만들어 준다
클래스 생성이 완료되면 MyActor 클래스의 헤더 파일을 열어서 액터의 콜리전에 콜리전을 가진 다른 액터가 들어오기 시작했을 때 호출되는 함수인 NotifyActorBeginOverlap 함수를 선언하고,
소스 파일에 구현부를 만들어준다
이 함수는 매개변수를 통해서 자신의 콜리전과 겹쳐진 콜리전의 액터를 알려준다
단, 언리얼 엔진에서 레벨에 배치되는 모든 오브젝트는 AActor 클래스를 상속받기 때문에 콜리전을 가진 오브젝트라면 접촉한 액터가 어떤 클래스던지 상관없이 무조건 AActor 클래스로 매개변수에 넣어져서 NotifyActorBegineOverlap 함수가 호출되는 것이다
만약 콜리전 체크를 하는 MyActor가 겹침 이벤트가 발생할 때마다 데미지를 입는다고 했을 때, 원래 MyActor 클래스에 데미지를 입혀야 하는 클래스가 AProjectile 클래스라고 가정해 보자
그때 이렇게 별도의 검사를 하지 않는다면 액터가 콜리전을 가진 아무 물체에나 스쳐도 데미지를 입게 될 것이다
그래서 필요한 것이 바로 캐스팅이다
언리얼 엔진에서는 Cast라는 함수로 기본적인 캐스팅을 제공한다
Projectile의 내용을 가져오기 위해 소스파일 상단에 #include "Projectile"을 넣어준다
이렇게 Cast 함수의 꺾쇠괄호 안에 캐스팅하고자 하는 타입의 클래스를 넣어주면 형 변환이 진행된다
만약 콜리전에 검출된 액터가 AProjectile 클래스가 아니라면 캐스팅에 실패할 것이고 Projectile 변수의 값은 nullptr가 되기 때문에 if문 안으로 진행되지 못해서 데미지를 주는 코드가 작동하지 않게 될 것이다
이러한 캐스팅 작업은 블루프린트에서도 가능하다
아무런 블루프린트클래스를 하나 새로 생성하고
빈 이벤트 그래프 영역에 우클릭한 후 블루프린트 콘텍스트 메뉴에서 "형 변환"이나,
캐스팅하고자 하는 타입의 클래스 이름을 검색하면 해당 클래스로 형 변환할 수 있는 노드를 추가할 수 있다
VR게임 개발을 위한 언리얼엔진/C++ 공부한 내용 끄적이기...
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!