Pawn 죽음 다루기
Pawn의 죽음을 다루기 위해서는 몇가지 함수가 추가적으로 필요하다.
먼저 죽음을 다루기 위한 함수가 필요하다.
죽음은 폰인 탱크 뿐만이 아니라, 타워도 죽음이 존재하므로 우선 베이스폰에서 해당 함수를 구현해준다.
구체적인 죽음에 대해서는 각 타워 및 탱크에서 다루게 된다.
여기서는 공통적인 부분으로 사운드와 이펙트를 다루게 되는데, 지금은 하지 않으므로 빈 칸으로 냅두고 넘어간다.
이어서 우선 타워에서 해당 함수를 구현해주자.
타워의 경우 간단하게 Destroy를 통해 파괴를 해주면 된다.
이때 베이스폰에서의 사운드와 이펙트 기능을 상속 받기 위해 Super를 사용해준다.
하지만 탱크의 경우는 다소 복잡하다.
우리는 탱크가 죽더라도 탱크의 뷰를 가지고 있는 것을 원한다.
따라서 인풋 비활성화, 마우스 커서 비활성화에 더하여 탱크를 안보이게 처리해준다.
이러면 실제로 탱크는 있지만, 우리 눈에는 보이지 않아 마치 죽은 것처럼 보이게 된다.
우선 안보이게 하는 것은 SetActorHiddenInGame 함수로 가능하다.
이어서 기존 설정한 기능도 정지시켜주기 위해 Tick을 비활성화해주자.
이는 SetActorTickEnabled 함수로 가능하다.
이러한 파괴에 대한 함수를 어디서 호출해야 할까.
바로 게임모드 클래스이다.
게임 모드 클래스에서 어떤 액터가 죽었는지 체크하여 해당 함수에 대한 파괴 함수를 호출하게 된다.
따라서 여기서 또 추가적으로 액터 죽음에 대한 함수가 필요하다.
이제 해당 함수를 구현해주어야 한다.
우선 우리는 게임 모드 클래스에서 타워와 탱크를 다루어야하기 때문에 각각의 값이 필요한 것을 알 수 있다.
따라서 헤더에서는 전방선언을, cpp에서는 헤더 인클루드가 필요하다.
우선 탱크에 대해 포인터 변수를 선언해주자.
BeinPlay에서 이 탱크 변수에다가 실제 탱크를 할당해주자.
GetPlayerPawn 함수를 통해 폰을 가져올 수 있고, 해당 함수는 APawn 타입을 반환하기 때문에 Cast 함수를 통해 타입을 바꿔주어야한다.
다음으로 함수를 ActorDied 함수를 구현해주자.
지금 죽은 액터가 만약 탱크라면 선언했던 Tank 변수를 통해서 아까 구현했던 HandleEstructuin() 함수를 호출한다.
여기서 추가적으로 탱크가 죽었다는 느낌을 주기 위해 탱크의 인풋과 마우스 커서도 비활성화를 해주고자한다.
각각 DisableInut 함수와 bShowMouseCursor의 값을 false로 할당함으로서 가능하다.
하지만 이를 위해서는 APlayController 타입이 필요하다.
우리는 해당 타입을 탱크 함수에서 private로 선언한적이 있다.
이를 public으로 바꾸면 간단히 해당 타입을 가져올 수 있지만, public getter 함수를 통해 가져오는 연습을 해보자.
해당 함수의 기능은 선언했던 APlayerController 타입의 변수를 단순히 반환해주는 것이다.
보통 이러한 함수를 사용할때 앞에 이름을 Get을 붙여주고, 수정도 이루어지지 않기에 const를 붙여주는 것이 관례이다.
이제 원하는 타입을 얻었으니 이어서 ActorDied 함수에서 원하던 함수 및 변수에 대한 값 설정이 가능하다.
탱크를 해주는 김에 타워에 대한 값도 처리해주었다.
타워는 DeadActor를 통해 바로 체크해주었는데, 해당 액터가 AActor 타입이므로 마찬가지로 Cast가 필요하다.
타워는 단순히 파괴만 하면 되므로 간단히 HandleDestruction 함수만 호출하면 된다.
이렇게 만든 ActorDied 함수는 어디서 호출되는가?
바로 체력이 0이 되는 순간이다.
따라서 헬스 컴포넌트 클래스에서 이를 호출하게 된다.
우선 해당 클래스에서 우리가 만든 게임 모드에 대해서 다루게 되므로 미리 선언해주자.
그리고 마찬가지로 실제 게임모드를 가져와서 해당 변수에 할당해주자.
게임모드의 경우 GetGameMode 함수를 통해 해당 함수는 GameModeBase 타입을 반환하므로 여기서도 Cast 함수가 필요하다.
이제 게임모드가 정상적으로 존재하고, 체력이 0보다 낮으면 해당 게임모드를 통해 ActorDied 함수를 호출해준다.
이제 플레이를 해보면 체력이 0이 되는 순간 타워는 사라지고,
탱크의 경우는 탱크의 뷰를 가진채로 더 이상 컨트롤이 불가능해지는 것을 볼 수 있다.
하지만 탱크가 남아는 있기에 타워는 계속해서 발사체를 발사하는 모습 또한 볼 수 있다.
'Unreal > Udemy 강의' 카테고리의 다른 글
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-31 (0) | 2024.04.13 |
---|---|
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-30 (0) | 2024.04.09 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-28 (0) | 2024.04.09 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-27 (0) | 2024.04.08 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-26 (0) | 2024.04.08 |