내일배움캠프 88일차 - 언리얼 C++ 멀티플레이 팀프로젝트: 미니게임파티 4일차
언리얼엔진5 C++ 기반 멀티플레이 게임 팀 프로젝트 제작
작업내용 요약
BombActor 관련 작업
| 팀원의 BombActor 코드 |
이전 작업TIL에서도 언급되었다시피 본인은 미니게임 GameMode 규칙을 정하고, 다른 한 명은 게임 룰의 주체가 되는 폭탄 액터의 제작을 맡았었다. 그리고 고맙게도 담당 팀원께서 폭탄 가동 시 폭발(ExplodeBomb)타이머가 돌아가고, 폭발 시 서버로 무엇을 넘기면 되는지 주석으로 친절히 설명해주셨다. 나는 이 주석에 따라 폭탄을 보유중인 플레이어를 제거할 로직을 짜기로 했다.
플레이어 탈락 로직 구현
폭탄 액터로부터 EliminatePlayer()를 게임모드가 전달받으면 인수에 해당되는 캐릭터를 생존자(AlivePlayer) 중에 해당되는지 검색한 후에 해당 캐릭터가 탈락하는 모습을 모든 클라이언트에게 보여주고, 생존자 명단에서 지우기로 했다. 플레이어가 탈락하는 모습을 보여주기 위해 MulticastRPC함수를 사용하는데, 이 함수를 모든 게임에서 사용되는 PlayerCharacter에게 추가하면 해당 캐릭터의 코드가 난잡해질 가능성을 우려해 처음에는 '액터 컴포넌트'를 추가해 캐릭터에게 Attach하기로 했다.1) 액터 컴포넌트를 이용한 플레이어 탈락효과 부여 (실패)
| 오류 발생 시점 |
그러나 액터 컴포넌트를 통해 플레이어 탈락함수를 Multicast로 전달하는 데에 실패하였는데, 어쩌면 NewObject를 통해 액터 컴포넌트를 생성한 것이 불안정했던 탓인지, 생성하는 과정에서 무언가를 잊은 것인지 탈락함수를 호출하는 과정에서 오류가 발생하였다.
이 문제에 대한 해결책을 궁리하던 중, PlayerState는 모든 PC에 클라이언트의 수 만큼 존재하는 것을 떠올렸다. PlayerState는 지정한 게임모드에 한정해 배치될 수 있다는 점, 그곳에서 자신만의 룰을 만들어 플레이어에게 영향을 미칠 수 있다는 점도 들어 내가 기획한 액터 컴포넌트의 대체재가 될 수 있다고 생각하여 액터 컴포넌트를 만드는 대신 PlayerState에 탈락함수를 추가해 활용하기로 했다.
탈락 대상자가 되는 캐릭터를 Ragdoll화하고, 폭탄이 터지는 영향으로 위로 솟구치게 만들고, 이를 Multicast를 통해 모든 클라이언트에게 보여주는 것이다. 또한 대상자는 빙의 대상을 관찰자 폰으로 옮길 것이다.
일련의 과정을 마치고 나면 아래와 같은 결과를 얻을 수 있었다.
GameMode에서 각 PlayerState에게 탈락함수를 전달하는 데에는 성공하였으며, 탈락자의 메세지를 띄우면서 폭발하면서 위로 튀어 오르는 효과를 확실하게 부여하였다.다만, 탈락자 시점에서는 관찰자로 전환되면서 카메라 위치가 초기화되지 않는 문제점이 있어 이를 고치는 것이 다음 날의 숙제가 될 것이다.
댓글
댓글 쓰기