본문 바로가기

Unreal/Udemy 강의

Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-16

캐스팅

현재 탱크가 무사히 움직이고 회전을 하지만, 탱크의 상단부에 해당하는 포탑은 회전하지 않는다.

이러면 포탑은 고정된 상태에서 발사하게 되므로, 포탑을 자유롭게 회전하여 발사체를 발사하도록 해야한다.

이를 위해 마우스 커서를 이용하며, 해당 마우스가 가리키는 쪽으로 포탑이 회전하게 된다.

 

마우스 커서는 컨트롤러에서 함수를 설정하여 건드리게 되는데, 이는 커서 위치에 대한 히트결과가 컨트롤러에 위치하기 때문이다.

이에 대한 작업은 BeginPlay에서 하게 된다.

하지만 탱크에는 해당 함수가 존재하지 않고, 대신 베이스폰에서 사용하지 않은 채 존재한다.

따라서 사용하지 않는 베이스폰에서 해당 함수를 지우고, 탱크에 복사를 해주었다.

 

그리고 컨트롤러에 대한 변수를 선언해준다.

우리가 사용하는 컨트롤러는 폰을 제어하는 데 사용되는 APlayerController이다.

 

이제 컨트롤러를 불러와야 하는데 이는 GetController 함수를 통해 가져올 수 있다.

하지만 여기서 문제가 생기는데 GetController 함수로 가져온 컨트롤러 타입이 Acontroller 인 것이다.

 

오류 문구를 살펴보면, AController 타입을 APlayerController 타입에 할당할 수 없다고 뜨는 것을 볼 수 있다.

이를 위해 캐스팅 함수를 사용하여 상위 클래스인 AController 타입을 하위 클래스인 APlayerController 타입으로 바꿔주어야 한다.

캐스팅 함수는 템플릿 함수로, 원하는 타입을 넣어 값을 가져오게 된다.

 

이제 제대로 컨트롤러를 얻었으며, 이제 해당 컨트롤러를 통해 마우스 커서에 접근하게 된다.