본문 바로가기

Unreal/Udemy 강의

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

승패 조건

기본적인 게임의 틀은 완성하였으니, 이제 승패 조건을 설정해주자.

승패 조건은 당연하게도 탱크가 죽으면 진 것이고, 탱크가 살아있고 남은 터렛을 모두 파괴하면 승리이다.

우리는 위젯으로 게임 승패에 대해 출력해줄 것이므로, 전과 같이 BlueprintImplementableEvent를 사용하여 함수를 선언해준다.

승패 유무 체크를 위한 간단한 bool 타입 변수도 가지게 된다.

 

해당 함수는 어디서 호출되어야 할까.

바로 탱크가 죽는 순간과 타워가 죽는 순간이다.

이는 게임모드에서 ActorDied 함수로 구현을 했었기 때문에 간단하게 바로 파악이 가능하다.

탱크가 죽는 순간은 게임에서 진 것이기 때문에 false의 값을 넘기도록 하였다.

 

게임에서 이기는 조건인 타워가 모두 죽는 조건은 먼저 체크해야할 것이 있다.

해당 함수는 타워가 죽는 것만 체크하기 때문에, 월드에 있는 모든 타워가 죽는 순간은 제대로 알지 못한다.

따라서 타워 갯수를 따로 체크하고, 타워 죽음이 발생할때 마다 이를 카운트하여 0이 되는 순간에 GameOver 함수에 true를 전달해야 한다.

우선 카운팅을 위한 변수와 함수를 선언해주자.

 

우리가 현재 클래스에 있는 모든 액터의 갯수를 얻기 위해서 다음과 같은 함수의 사용이 가능하다.

해당 함수는 UGamePlaystatics에 속해있다.

해당 함수를 자세히 살펴보면, 첫 번째 변수는 자주 보던 것으로 this를 넣어주면 된다.

다음은 TSUbclassOf 타입인데, 우리는 해당 타입이 UClass 타입인 것을 지난 강의를 통해 알고 있다.

우리는 타입만 넘기면 되므로, StaticClass 함수를 통해 타워의 UClass 타입만 넘겨주면 된다.

마지막으로 액터 포인터를 담은 TArray이다.

변수 이름에서도 알 수 있듯이, 넣은 TArray의 값이 변경되는 것을 알 수 있다.

따라서 로컬 변수로 해당 TArray를 선언해서 넣어주고, 액터가 담긴 TArray를 반환받는다.

해당 TArray.Num()을 통해 TArray의 총 갯수를 알 수 있다.

 

이제 선언했던 변수에 해당 함수를 통해 반환받은 값을 넣어주자.

이는 게임시작시에 해주면 될 것 같다.

 

다음으로 타워가 죽는 순간에 타워의 갯수를 감소시켜주고, 갯수가 0이 되면 게임 오버에 True를 넣어주자.

 

VScode에서 할 수 있는 작업은 끝났다.

이제 언리얼로 돌아가 해당 함수를 호출하고, 간단하게 print string으로 테스트를 해보자.

 

이제 누가 먼저 죽느냐에 따라 간단하게 출력되는 것을 확인할 수 있다.