▲ (좌측부터) 유니티 로랑 기버트 매니저, 피카 프로덕션 마크-앙투안 포티에 CTO,
휴지카프 스튜디오 앤디 멧카프 CTO, 스틱록 자말 지아티 PD

코로나19의 글로벌 유행 이후, 비대면 접촉 환경에 대한 니즈가 높아지면서 게임업계에서도 멀티플레이 게임 수요가 크게 늘었다. 이에 유니티는 '유니티 게이밍 서비스' 등 멀티플레이 게임 개발을 위한 솔루션을 출시하는 한편, 유니티 엔진 내에 멀티플레이 게임 개발을 원활하게 하기 위한 기술 개발을 지난 유나이트 2022 및 여러 세션을 통해 예고해온 바 있다.

이번 GDC 2023에서 유니티의 로랑 기버트 매니저와 샘 스미스 매니저는 유니티 및 유니티 게이밍 서비스를 활용해 성공적으로 멀티플레이 게임을 개발한 개발 스튜디오 세 곳을 초청, 그들의 사례를 소개하면서 노하우를 공유하는 시간을 가졌다.


첫 번째로 소개된 곳은 '쉽 오브 풀즈(Ship of Fools)'의 개발사인 피카 프로덕션이었다. 무대 위에 초대된 마크-앙투안 포티에 CTO는 P2P 방식이라고 해도 십여 명 정도밖에 안 되는 소규모 스튜디오에서 멀티플레이 게임을 만드는 것은 쉽지 않았다고 설명했다. 특히 피카 스튜디오에서 가장 애먹은 부분은 호스트와 클라이언트 사이의 데이터 간극을 조정하는 것이었다.

네트워크 기반의 멀티플레이 게임은 일반적으로 물리적 한계로 인해 클라이언트에서 발생한 일이 서버에 다소 늦게 전달되는데, 이는 클라이언트-호스트가 직접 연결되는 P2P 방식에서도 피해갈 수 없는 문제였다. 그나마 각 클라이언트별 플레이어 정보는 최우선 사항으로 처리하게끔 조치하긴 했으나, 그 외에 몬스터나 아이템 등 클라이언트와 호스트와 교집합에 있는 몬스터을 어떻게 처리해야 원활할지 고민이 생긴 것이다. 특히 아이템 드롭과 관련된 만큼, 이 부분은 단순하게 생각할 수가 없었다.

▲ 오브젝트를 내려놓거나 아이템이 드랍될 때, 호스트와 클라이언트가 서로 다른 상황이면 잘 굴러갈 리가

피카 프로덕션은 이러한 과정을 빠르게 처리하기 위해 유니티의 도움을 받아 넷코드를 구축하고 소스코드를 모니터링, 클라이언트와 호스트 사이의 아이템 사용이나 드랍 그리고 캐릭터의 움직임에 간극을 최대한 없앴다. 그 결과 쉽 오브 풀은 캐주얼한 그래픽이지만 십자포화와 각종 바다괴수들이 우글거리는 환경에서 플레이어가 서로 협동하며 랜덤한 난관을 극복해나가는 로그라이크의 구조를 구축할 수 있었다.


터보 골프 레이싱의 개발사 휴지카프 스튜디오에서 겪은 가장 큰 고민은 멀티플레이 환경에서 물리 구현이었다. 터보 골프 레이싱은 말 그대로 고속으로 질주하는 레이싱카가 공을 들이받아서 홀까지 몰고 나가는 레이싱 게임이다. 다른 자동차나 장애물을 피해서 최고속으로 질주하는 것이 목적이 아니라 또다른 오브젝트인 골프공과 충돌 혹은 접촉하면서 나아가는 것이 터보 골프 레이싱만의 묘미였다. 이를 살리기 위해서는 멀티플레이 환경에서도 안정적인 물리 구현이 필수적이었다,

그러나 휴지카프 스튜디오의 소규모 인원으로는 다수의 유저가 매칭되는 환경에서 프레임드랍과 딜레이의 영향을 받지 않고 일괄적으로 물리가 구현되는 게임을 구축하기 어려웠다. 1:1로 적용되는 P2P가 아닌, 여러 명이 엮인 데디케이트 서버 기반의 게임에서 볼을 튕기면서 안정적으로 주행하는 환경 자체를 구현해야 했는데, 서버와 클라이언트 사이의 간극을 극복할 만한 무언가를 찾지 못했던 것이었다.

▲ 서버, 클라이언트, 딜레이라는 개념에 대해 이해한 상황에서는 같은 실수를 반복하진 않았지만

▲ 콜리전에 들어가는 순간과 그게 끝나는 시점을 기준으로 하면, 서버나 어디에서 딜레이가 생길 때 문제가...

이러한 고민은 여러 유저들이 경쟁을 펼치는 FPS, 히스테라의 개발사 스티키록 스튜디오도 공유하는 문제였다. 특히나 히스테라는 불특정 유저들이 서로 붙게 되는 매치메이킹까지도 갖춰야 하다보니 더더욱 큰 문제가 발생했다. 네트워크 환경의 편차가 데디케이트 서버 기반이나 P2P 서버 기반보다 변수도 많았고, PVE가 아닌 PVP 게임이었기 때문에 다수의 행동 결과를 어떤 기준에 맞춰 동일하게 산출해줘야만 비로소 게임이 제대로 돌아가는 구조였기 때문이다.

이를 타파하기 위해 두 게임사는 서버-클라이언트 관련 기술을 축적하고자 했으나, 멀티플레이 게임 개발 경력이 없었던 이들은 여러 차례 난관을 겪었다. 특히 휴지카프 스튜디오는 싱글플레이 게임 개발을 할 떄 흔히 사용하는 OnTriggerEnter, OnConditionEnter와 OnTriggerExit, OnConditionExit의 구조로 충돌 과정을 구현했다가 클라이언트-서버의 물리적 딜레이로 인해 예기치 못한 상황을 경험하기도 했다.

스티키록 스튜디오도 이와 유사한 경험이 발목을 잡았다. 통상 멀티플레이 게임을 처음 개발할 때 어떤 캐릭터의 충돌체가 처리 과정에서 다소 딜레이가 되어 캐릭터의 본체와 다른 위치에 잡히는 현상이 발발하는데, 이를 조절하는 방법에서 문제가 발생한 것이었다. 특히나 스티키록 스튜디오는 이와 관련한 지식이 거의 전무한 상황이라 서버-클라이언트가 다이렉트로 서로 상황을 전달하는 구조로 게임을 짰다보니 오히려 클라이언트에서 처리된 것을 서버에서 하나하나 처리하다가 딜레이되는 아이러니가 발생하기도 했다.


이러한 지연 사태를 상정해서 최근에는 '롤백 넷코드', 즉 미리 연산을 통해서 상황을 시뮬레이션해서 적용하는 방식이 일부 게임에서 화제가 되기도 했다. 그러나 이 두 게임에서는 적용하기 어려운 방식이었다. 특히 실시간으로 총탄이 쏟아지고 결과가 매번 바뀌는 FPS인 히스테라에서는 이를 일일이 연산으로 시뮬레이션하는 것도 그리 녹록지 않았다. 더군다나 슈팅 게임은 핵이나 기타 비인가 프로그램에 대해서도 취약했다.

이러한 교착 상황을 타파해준 것이 유니티에서 최근 활용하기 시작한 ECS를 위한 넷코드였다. 오브젝트 하나하나에 기반을 둔 것이 아닌, 데이터 스택을 기반으로 둔 만큼 오브젝트의 수가 동시다발적으로 많아도 큰 영향을 받지 않았기 때문이었다. 여기에 넷코드가 적용되면서 멀티플레이에서도 오브젝트의 수와 관계 없이 빠르게 처리가 가능해졌다.

뿐만 아니라 유니티가 게임 서버 관리 및 넷코드까지 체크하는 '유니티 게이밍 서비스'를 개시하면서 이들의 고민은 한층 가벼워졌다. 두 스튜디오 다 열 몇 명 정도의 개발 인력을 보유한 소규모 팀인데, 이 인력으로는 게임 개발 및 출시 이후에 라이브 서비스와 서버 관리, 확장 같은 업무를 진행하기엔 턱없이 역부족이었기 때문이었다.

▲ 소수의 인원으로 온라인 게임의 라이브 서비스를 맡는 건 쉬운 일이 아니다

물론 유니티 게이밍 서비스는 퍼블리셔처럼 운영을 전적으로 맡아주는 개념의 서비스는 아니다. 그러나 각 플랫폼 그리고 게임사의 전략에 맞춰서 넷코드 체크 및 매치메이킹이나 커뮤니티 솔루션 등 기술적으로 지원을 하고 있으며, 출시 후에 성능 모니터링뿐만 아니라 수익화, 고객 유치, 인앱 구매 등 게임 개발에만 전념해온 개발사들이 쉽사리 손을 대지 못하는 부분까지도 지원한다.

유니티에서는 게이밍 서비스뿐만 아니라 대규모의 경쟁적인 멀티플레이 게임 개발을 위한 여러 가지 준비를 진행하고 있다. 특히 이전에 ECS와 DOTS 관련으로 선보였던 '메가시티' 데모를 멀티플레이용으로 개조, 매치메이킹을 비롯해 멀티플레이 게임 개발자들이 필요로 하는 기능들을 시범적으로 적용하고 있으며, 자세한 정보는 유니티 게이밍 서비스 페이지를 통해서 확인할 수 있다.


▲ 유니티에서는 온라인 게임 개발 외에도 매치메이킹, 로그인 서비스까지 폭넓게 제공하고 있다