Tower 클래스
현재 포탑이 회전하도록 만들어주었지만, 탱크에만 상속되어있고 타워의 경우 클래스 자체가 존재하지 않아서 회전하지 않는다.
따라서 타워 클래스를 생성해주고, 상속 및 기타 터렛이 필요로 하는 기능을 구현해주어야 한다.
우리는 터렛을 적으로 설정하였다.
따라서 터렛의 일정 범위 내에 탱크가 위치한다면, 탱크를 향해 터렛이 따라오며 탱크를 향해 발사체를 발사해야 한다.
이를 위해 알 수 있는 것은 우리가 탱크의 위치와 탱크의 위치와 터렛사이의 거리, 그리고 범위 값을 설정해주어야 하는 것이다.
우선 탱크 포인터를 얻는 것은 BeginPlay 함수에서, 나머지는 Tick 함수에서 진행하게 된다.
현재 해당 함수들이 존재하지 않으므로, 따로 구현을 해주어야 한다.
탱크에 대해 접근할 포인터도 미리 전방 선언해주었다.
먼저 탱크의 위치를 얻기 위해서 탱크 즉, 플레이어 폰을 가져와야 한다.
이는 GetPlayerPawn 함수를 통해 얻을 수 있다.
해당 함수는 UGameplayStatics에 속하므로, 해당 내용에 대한 헤더 파일 인클루드가 필요하다.
이제 자주 보게된 WorldContextObject에는 현재 클래스에 해당하는 this를 넣어주고,
두 번째로 플레이어 인덱스는 가장 첫 번째 플레이어를 가리키는 0을 넣어준다.
여기서 주의해야 할 것은 GetPlayerPawn이 APawn 타입을 반환하는 것이다.
하지만 우리가 담을 포인터는 ATank2 타입이다.
따라서 전에 사용했었던 Cast를 사용해 타입을 바꿔주어야 한다.
이제 탱크 포인터를 얻었다.
이를 토대로 Dist 함수를 이용하여 터렛과 해당 탱크의 거리를 구해준다.
그리고 설정했던 범위 값과, 거리를 이용하여 만약 현재 거리가 범위 이내라면 터렛이 돌아가도록 해준다.
거리가 범위와 정확히 같을 때만 하면 안된다.
왜냐하면 매 프레임마다 거리가 정확히 같지는 않을 수 있기 때문이다.
거리가 순간적으로 범위보다 더 작아질 수 있으므로 이를 방지하기 위해 같거나 작을 때로 해주어야 한다.
이제 컴파일 하면 터렛이 돌아갈 것이라고 생각하지만, 아직 빼먹은 것이 있다.
현재 터렛에 대한 부모 클래스가 베이스폰이기에 우리가 방금 만들어준 타워 클래스로 바꿔주어야 한다.
이제 우리가 설정한 터렛 범위내에 탱크에 위치하게 된다면 탱크를 향해 조준하는 터렛을 볼 수 있다.
범위 값 또한 디폴트에서 편집할 수 있게 했으므로, 자유롭게 수정할 수 있다.
'Unreal > Udemy 강의' 카테고리의 다른 글
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-21 (0) | 2024.04.06 |
---|---|
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-20 (0) | 2024.04.05 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-18 (0) | 2024.04.05 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-17 (0) | 2024.04.04 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-16 (0) | 2024.04.04 |