내일배움캠프 87일차 - 언리얼 C++ 멀티플레이 팀프로젝트: 미니게임파티 2~3일차

언리얼엔진5 C++ 기반 멀티플레이 게임 팀 프로젝트 제작

작업내용 요약

모든 게임모드의 베이스가 되는 GameModeBase 관련 작업미니게임:폭탄돌리기의 폭탄 생성 로직을 작업하였다.

GameModeBase 관련 작업

우리 프로젝트는 여러 미니게임을 순회하면서 플레이 하는 방식이기 때문에 로그인 설정이나 공동규칙을 가진 Base와 각 미니게임의 규칙을 보유한 파생 게임모드가 각 미니게임의 레벨을 맡는 식으로 구성된다. 그렇기 때문에 Base에서 미니게임의 시작을 알리는 virtual void StartMinigame() 미니게임의 종료를 알리는 virtual void EndMinigame()을 만들어 각 파생 게임모드가 상속할 수 있는 구조로 꾸몄다.

각 게임모드StartMinigame()Super와 함께 오버라이드 호출함으로서 미니게임 관련 변수를 초기화하고 현재 게임상태를 진행중(Playing)으로 선언하는 역할을 하며, EndMinigame()Super와 함께 오버라이드 호출하면 해당 게임의 스코어를 결산하고 미니게임 종료(Ending)를 선언한다.

Base에서 만든 이 함수를 파생되는 게임모드들이 사용해야 코드의 일관성을 높일 수 있기 때문에 오후 스크럼 회의해당 함수의 목적을 설명하고 각 미니게임 담당 팀원들에게 PR(Pull Request)을 요청해 해당 함수를 사용할 것임을 명시, 장려하였다.

미니게임:폭탄돌리기 - 폭탄 생성 로직

우리 프로젝트는 하나의 미니게임에 2인이 작업하는 2인1조 방식이다. 그중에서 나는 해당 미니게임의 규칙 로직을 짜는 역할을 맡았으며, 다른 한 명은 미니게임의 핵심인 '폭탄' 액터의 제작을 맡았다.

팀원의 BombActor의 ActivateBomb() 코드의 일부

팀원이 처음 제작한 BombActor리플리케이션된 액터로 캐릭터와 접촉하면 기존 소유자를 Detach하고 새 캐릭터의 일부로 Attach되는 구조였다. 하지만 누군가에 부착되지 않은 채 월드에 배치되면 그 누구도 폭탄과 접촉하려 하지 않을 것이다.

팀원과 소통하면서 "게임이 시작되면 총합점수가 높은 사람을 무작위로 술래로 지목" 하는 규칙을 추가할 예정이라 밝혔고, 이에 팀원은 "ActivateBomb()을 실행하면 매개변수로 설정된 대상자에게 폭탄을 Attach하고(SetBombHolder), 폭발 카운트를 시작" 하는 로직을 구현하였다.

내가 구현한 미니게임 GameMode의 게임시작 로직의 일부

이후에는 간단하다. 내가 그것을 받아 폭탄을 월드에 생성하고 술래 대상자를 인수로 받는 ActivateBomb()을 추가하면 된다.

이를 통해 확인할 수 있는 결과는 다음과 같다.


PR의 중요성

사실 이전 팀프로젝트에서는 팀원간의 상호소통이 필요할정도로 역할관계가 크게 엮이지 않은 편이었고 팀장이 전원의 코드리뷰를 해주었기 때문에 PR의 중요성이 크게 부각되지 않았다. 하지만 2인1조로 하나의 미니게임을 맡게 된 점, 그리고 직장환경에서도 PR을 자주한다는 중요성을 들어 PR을 하기 시작하였고, 마침 이전 프로젝트에서 PR을 해본 팀원이 있었기에 가이드를 많이 받았다. 덕분에 코드를 Git에 올리기 전에 검수를 체계적으로 하는 방법에 대해 배울 수 있었다.

댓글

이 블로그의 인기 게시물

내일배움캠프 사전캠프 - 사전캠프설 연휴 커피 파밍 이벤트 작품 [ EXTREMITY ]

내일배움캠프 29일차 - 커리어데이 2일차 : 클라이언트 프로그래머로서 포트폴리오, 입사준비팁