
2023.11.27 ~ 2023.12.22
시간 순서대로라면 싱글플레이 기반 FPS를 올리는 게 맞지만... 내용 정리를 위해 프로젝트를 다시 열어보니 포스팅하기에는 빈약해 보인다.
아무래도 처음 제작해 본 게임이기 때문에 더더욱 그렇겠지만, 그 프로젝트는 약간의 개선 후에 다시 내용을 정리해서 포스팅 해보려고 한다.
3~4인 1조로 팀을 만들자고 하는 강사님의 제안에 모든 교육생들이 이견이 없었다. 어쩌다 보니 한 팀의 대표로 선정되어 팀원을 모으게 되었는데, 모든 교육생들의 참여하고픈 장르와 분야를 물어보며 원피스처럼 동료를 모았다.
나는 이번 프로젝트에서 개발보다는 기획과 PM을 해보고 싶어 이를 자처했다. 도중에 팀원들이 코딩에서 막히는 부분이 있으면 해결해주는 역할도 겸임했다. 3주라는 짧은 기간동안 진행된 프로젝트였기 때문에 빈틈 없이 일정을 잡아야 했다.
학창 시절 가장 열심히 했던 게임이 와우였다. 대격변과 판다리아 시절 정규 공격대 힐러 오더에 투기장까지 돌던 하드 유저였었고, 2023년 가을 출시된 하드코어 서버를 약 10년만에 향수를 느끼며 플레이 중이었다.
이러한 배경으로 MMORPG를 만들고 싶었지만, 이미 다른 팀에서 제작하기로 결정이 된 상태였기 때문에 조금 더 콘텐츠의 폭을 좁혀보았다. PVP, 그 중에서도 원형 투기장 콘텐츠 제작에 집중하기로 방향을 잡았다.
다만 팀원들 중 누구도 와우나 아이온 등 고전 MMORPG를 플레이해 본 사람이 없었다. 대부분 롤이나 로스트아크를 하던 사람이기 때문에 쿼터뷰가 익숙했고, 백뷰 시점의 RPG를 해 본 경험이 없었다.
그렇게 플레이어 시점은 3인칭 쿼터뷰로 결정되었다. 이 때, 디아블로 시리즈와 롤이 생각나서 추가적인 분석을 하며 만들고자하는 게임의 방향성을 좁혀갔다.

2:2, 3:3 투기장 콘텐츠의 기본적인 룰을 가져왔다. 단판 섬멸전. 각 팀은 투기장의 반대편에서 나와 어느 한쪽 팀이 전멸할 때까지 게임을 계속한다.
쿼터뷰 시점의 액션 RPG의 주요 기능을 차용했고, 대상을 클릭하는 것이 아닌 가장 가까운 적을 공격하는 매커니즘을 만드는 데 영감을 주었다.
쿼터뷰 시점의 AOS가 가지는 간편한 캐릭터 조작 매커니즘과 직업마다 가지는 고유한 스탯과 스킬이 존재하는 설정을 가져왔다.
이외에도 로비 시스템은 스타크래프트와 카트라이더를 참고했다.
Dedicated Server로 구현하기에는 주어진 기간이 3주였다. 빠르게 적용시킬 수 있는 Listen Server를 기반으로 멀티플레이를 할 수 있도록 했다.
플레이어는 각자의 이름을 가지고 세션을 생성하거나 참가할 수 있으며, 참가 후에는 세션 로비에서 본인의 팀과 직업을 선택한다.
방장은 모든 플레이어들이 준비 완료되면 비로소 게임을 시작할 수 있다. 두 팀의 대결구도로 전투가 일어나며, 어느 한 팀이 전멸할 때까지 게임을 계속하는 단판 섬멸전 방식이다.
직업마다 다른 스킬과 스탯을 기반으로 전략적으로 승리하기 위해 팀워크를 맞춰야 한다.
크게 신경쓰지 않았다. 투기장(Arena) 난투(Rumble)의 의미로 'Arena Rumble'이라는 가제를 팀원들에게 들고 갔는데, 그냥 그걸로 정해졌다.
게임을 플레이하기에 앞서 플레이어의 이름을 설정한다. 이후 자신이 세션을 생성할 지, 혹은 만들어진 세션에 참가할 지 선택한다.
세션에 참가하면 로비에서 자신의 팀과 직업을 선택하고, 준비 버튼을 누른다. 모든 플레이어가 준비가 완료되면 방장은 게임을 시작할 수 있다.

게임을 접속하면 플레이어의 이름을 설정하고, 세션 생성, 세션 참가, 그기고 게임 종류 중 하나를 선택할 수 있도록 한다.


세션의 이름, 최대 플레이어 수, 그리고 LAN 사용 여부를 체크하고, 세션을 생성하면 다음과 같은 로비 공간이 나타난다. 새로 들어오는 플레이어는 A/B 두 개의 팀 중에서 팀원의 숫자에 따라 적은 팀 쪽에 자동으로 배정되며, 중간의 파란색 버튼을 통해 팀 변경을 할 수 있다.


세션 검색을 통해 로컬 네트워크 상에 존재하는 세션을 불러오고, 그 중 내가 참여하고 싶은 세션을 클릭해 접속한다. 이후 원하는 팀과 직업을 선택한 후 준비 버튼을 누르면 자신의 이름 옆에 초록색 체크 표시로 세션 내 사람들에게 준비가 되었음을 알린다. 준비가 되면 팀과 직업 변경이 불가하다.


모든 클라이언트가 준비 완료 상태라면 서버는 자신의 직업을 선택한 후 게임 시작이 가능하다.
팀을 이뤄 전투를 하기 때문에 내가 사용하려는 스킬을 대상에 맞게 사용할 수 있어야 한다. 예를 들어, 공격을 했는데 아군이 맞으면 욕을 먹을 것이다.
이를 방지하기 위해 스킬을 사용하기 전, PlayerState에 저장되어 있는 팀의 정보를 받아온다. 나의 PlayerState에 저장되어 있는 팀의 정보와 비교해서 같으면 아군, 다르면 적군으로 인식하는 시스템을 만들었다.
전사와 도적과 같은 밀리 딜러들의 기본 공격 매커니즘이다.
공격을 시작하면 전방에 점 두 개를 생성하고, 그 점을 중심으로 정육면체 박스 공간을 만든다. 이 두 박스를 연결한 공간 내부에 적이 있으면 대미지를 가하는 시스템이다.
전방으로 길게 박스 공간이 존재한다. 이 공간 내에 들어온 모든 적들을 범위 내에 있는 적의 배열 안에 집어넣는다. 스킬을 사용하면서 그 중 가장 가까운 적을 꺼내와 해당 적에게 스킬이 날아가도록 한다.
전사와 도적의 경우 가장 가까운 적에게 달려가거나 날아가는 등의 스킬로 사용되고, 법사와 궁수 같은 원거리 딜러는 여기에 유도탄 기능을 활용해 마법 구체 혹은 화살이 대상에게 날아가도록 설정했다.
레벨 상에 존재하는 모든 아군의 능력치를 일정시간 증가시키는 기능이 버프다.
디버프는 특정 공격 대상의 능력치를 일정시간 감소시키는 기능인데, 이는 대미지를 부여할 때 발생하도록 만들었다.
게임을 플레이하는 데 있어 정말 필요한 정보만을 보여줘야 한다. 내 캐릭터의 체력과 마나, 직업에 따른 스킬 아이콘과 사용 가능 여부, 그리고 팀원의 이름과 정보만 보여줘도 정보는 충분했다. 인벤토리와 장비 기능이 없으니 보다 깔끔한 UI가 되었다.

스킬 별로 사용하는 데 필요한 마나, 그리고 사용 대기시간이 다르다. 아래와 같이 스킬 사용 시 대기시간이 남았거나, 마나가 부족해 사용할 수 없으면 스킬이 비활성화된다.

캐릭터의 체력이 0이 되면 죽는 모션이 나오고, 이후 사망한 캐릭터의 메시는 사라지고 관전자 모드에 들어가게 된다.
기존 게임 플레이를 위한 UI는 사라지고, 관전자 UI로 변경된다. 시점은 투기장 레벨을 한 눈에 볼 수 있는 카메라로 고정된다. 양쪽 상단에는 각 팀원들의 체력과 마나 상태를 확인할 수 있다.

한 쪽 팀이 전멸하면 게임이 끝나고, 아래와 같이 경기 결과와 함께 게임 메인 화면으로 이동하는 버튼이 나온다.

날먹했다
언리얼엔진 마켓플레이스 이달의 무료 에셋에 중세 투기장 배경이 있었다. 이를 전술적으로 사용할 수 있게, 그리고 쿼터뷰 조작에 맞춰 약간의 변경을 진행했다.

날먹했다22
우리 반은 프로그래밍으로만 구성된 커리큘럼이었으며, 모델링 관련 교육은 거의 없었다. 팀원 중 한 분이 모델링에 관심이 있어서 블렌더를 독학하고 계셨지만, 원하는 결과를 얻기에는 3주라는 프로젝트 준비 기간이 너무 짧았다. 결국, 또 다시 마켓플레이스의 큰 도움을 받았다.
서비스 종료한 에픽게임즈의 게임 '파라곤'의 캐릭터가 애니메이션과 스킨까지 포함해 모든 것이 무료로 올라와있었다. 제공된 캐릭터 에셋을 뜯어보면서 초기에 생각해 둔 직업별 컨셉에 맞춰 모션과 이펙트 작업을 했고, 일부 모션들은 mixamo에서 애니메이션을 가져와 리타겟팅을 진행했다.

기획 단계에서 구상한 스킬을 애니메이션과 이펙트, 그리고 위의 스킬 매커니즘들을 활용해 구현했다.
스킬 이펙트 역시 대부분 캐릭터 에셋에 포함되어 있는 파티클 시스템을 적절히 활용했다. 화려한 마법을 사용하는 법사에는 따로 나이아가라 시스템을 이용한 이펙트를 가져와 적용하기도 했다.

베타로 플레이한 영상들에 언리얼 시퀀서로 몇몇 부분을 애니메이션 작업을 진행했다. 전투를 준비하고 스킬을 사용하는 모션을 영화적으로 연출했다. 캐릭터의 스킬 모션과 효과, 그리고 다양한 게임 내 기능은 영상에서 확인해보자.
완성하기에는 3주가 부족해서 양해를 구하고 모든 팀들이 일주일 더 작업을 진행했다. 팀원들 대부분이 밤까지 작업을 하거나 주말동안 집에서 작업하는 등 노력을 많이 했다.
프로젝트 발표의 느낌으로 브리핑을 했지만, 프로그래밍을 어떻게 했는지에 대한 기술이 추가적으로 필요해 보인다. 다음 포스트에서는 이에 대해 보다 자세히 적어보도록 하겠다.