딥디쉬 던전: Unity 이용한 3인 온라인 협동 플레이

이 웹페이지는 이해를 돕기 위해 기계 번역으로 제공됩니다. 기계 번역으로 제공되는 콘텐츠에 대한 정확도나 신뢰도는 보장되지 않습니다. 번역된 콘텐츠의 정확도에 관해 의문이 있는 경우 웹페이지의 공식 영어 원문을 참고해 주시기 바랍니다.
Behold Studios의 2인 팀이 Netcode for GameObjects, Lobby, Relay, Vivox 및 Unity 6.3을 사용하여 온라인 협동 어드벤처인 Deep Dish Dungeon을 어떻게 만들었는지 알아보세요.
전담 네트워크 엔지니어가 없는 두 명의 팀이 온라인 협동 게임을 만드는 방법은 무엇인가요?
브라질 브라질리아에서 설립되어 현재 캐나다 토론토에 기반을 둔 Behold Studios는 10년 이상 Unity로 게임을 만들어 왔습니다. 그들의 최신작인 Deep Dish Dungeon은 1명에서 3명까지 플레이할 수 있는 협동 던전 크롤러입니다. 대부분의 개발에서 단 두 명의 사람이 Deep Dish Dungeon을 작업했습니다: 스튜디오 책임자 사울로 카마로티는 디자인, 프로그래밍, 비즈니스 및 마케팅을 담당했으며, 아티스트 카롤리나 바움가르텐은 컨셉 아트 3D 모델, 텍스처, UI 등 모든 시각 자료를 제작했습니다.
Deep Dish Dungeon은 출시 전 500,000개의 스팀 위시리스트를 돌파하며 큰 기대를 모았으며, 현재 스팀과 Xbox Game Pass에서 크로스플레이로 이용 가능합니다. Unity Services와 Unity 6.3을 사용하여 Behold Studios가 시간과 자원을 어떻게 절약했는지 사례 연구를 읽고, 이 야심 찬 프로젝트를 가능하게 한 설계 결정을 이해하십시오.

딥 디쉬 던전 | 비홀드 스튜디오 | 로우 퓨리
성과:
- 출시 전 50만 이상 스팀 위시리스트, 발표 트레일러 후 며칠 만에 6만 5천 개 포함
- 개발 첫날 플레이 가능한 온라인 Multiplayer 프로토타입
- 추가적인 네트워킹 코드 없이 스팀과 Xbox 간의 크로스플레이
- 11개 언어로 Localization
- 늦게 합류한 플레이어에게 공유 던전의 모든 적, 아이템 및 개체에 대한 최신 정보를 제공합니다.

Multiplayer 제약을 강점으로 바꾸기
Behold Studios는 2011년 페이스북 게임과 2020년 Out of Space를 포함하여 Multiplayer 게임을 출시한 적이 있습니다. 딥 디쉬 던전에서 사울로는 팀을 의도적으로 작게 유지했다. 그는 카롤리나를 프로젝트에 고용했는데, 그녀가 다학제적 아티스트이기 때문에 3D, 2D, 로고, 일러스트레이션, 컨셉 아트 모두 다룰 수 있었기 때문이다.
유일한 프로그래머인 사울로는 프로젝트 범위를 유지하는 데 각별히 주의해야 한다는 것을 알았다. "Multiplayer 프로젝트에 훨씬 더 많은 복잡성을 더하고, 보통 사람들은 그러한 문제들을 다루는 전담 엔지니어를 가지고 있습니다."라고 그는 말합니다. 단지 두 명의 팀이 아니라, 저 혼자 프로그래머입니다. 그래서 저는 Multiplayer 한계를 디자인 요소로 사용하는 게임을 만들어야 했습니다."

딥 디쉬 던전 | 비홀드 스튜디오 | 로우 퓨리
이는 이러한 한계들을 강점으로 바꾸는 일련의 의도적인 선택으로 이어졌습니다.
- 협동 전용, PvP 없음: 플레이어들이 같은 팀의 Friends이기 때문에 게임은 각 클라이언트를 신뢰할 수 있습니다.
- 피어 투 피어, Dedicated Server 없음: 게임을 만드는 플레이어가 호스트 역할을 합니다.
- 지연에 관대함: 높은 핑이 경험을 망치지는 않기 때문에 게임에 복잡한 이동 예측이 필요하지 않습니다.
- 의도적으로 단순한 모습: 게임은 비홀드 스튜디오의 기술 수준에 맞는 픽셀화된 스타일을 구현하기 위해 출력 해상도의 3분의 1로 렌더링했으며, 무거운 VFX 및 셰이더 작업을 피했습니다.
아트 스타일 또한 플레이어의 기대를 설정하는 데 역할을 했습니다. "심지어 미학도 우리를 돕는다"고 사울로가 설명한다. "어떤 것들은 완전히 매끄럽게 처리되기를 기대해서는 안 됩니다."

딥 디쉬 던전 | 비홀드 스튜디오 | 로우 퓨리
첫 줄의 코딩부터 Multiplayer를 위해 설계하기
Saulo는 Photon과 같은 전용 Multiplayer 스택에 대한 이전 경험이 있었습니다. 그럼에도 불구하고, 그는 Unity 6의 end-to-end multiplayer stack이 견딜 수 있는지 테스트하기 위해 3개월짜리 프로토타입 예산을 책정했다.
"우리가 Netcode for GameObjects 봤을 때, 그것이 우리에게 딱 맞는 것임을 깨달았어요."라고 그가 말합니다. "우리는 Unity 핵심 로직, 즉 우리가 사물을 만들고 객체를 관리하는 방식을 활용하고 그 위에 Multiplayer 레이어를 추가할 수 있습니다."
그는 Unity 기술 자료의 Lobby와 Relay 코드 샘플에서 시작하여 빠르게 진전했습니다. "첫 줄의 코드가 이미 Multiplayer Lobby 및 Relay 시스템을 구현하고 있었다"고 그는 말합니다. 첫날에 저는 이미 Multiplayer 게임을 하고 있었습니다.
개발 초기부터 Multiplayer 염두에 두었다는 것은 리팩토링할 싱글 플레이어 코드베이스가 전혀 없었다는 것을 의미합니다. 사울로는 다른 팀들이 기존 프로젝트에 Multiplayer 추가하는 데 한 달에서 여섯 달까지 걸리는 것을 지켜봤습니다.

딥 디쉬 던전 | 비홀드 스튜디오 | 로우 퓨리
플레이어를 Lobby 및 Relay와 연결
플레이어에게 친구와 합류하는 것은 한 번의 클릭 수. 호스트는 Steam Friends 목록에서 친구를 선택하고 Lobby ID가 포함된 초대장을 보냅니다. 친구는 수락하고, 동일한 Lobby 참여하며(호스트가 비밀번호를 설정한 경우 비밀번호를 입력), Relay 통해 호스트에 연결합니다.
더 어려운 부분은 비공개적으로 일어납니다. 친구는 진행 중인 세션에 언제든지 참여할 수 있으므로, 던전 내의 모든 네트워크 객체, 예를 들어 어떤 적이 죽었는지, 남은 체력, 어떤 아이템이 획득되었는지 등을 따라잡아야 합니다. 사울로는 맞춤형 씬 관리를 구축하는 것을 피하고 싶어 했다. 대신, Deep Dish Dungeon은 세션이 시작될 때 장면을 저장 파일로 직렬화합니다. 누군가 참여하면 씬 객체는 제거되고 호스트의 동기화된 상태에서 동적으로 로드됩니다. 돌아오는 플레이어는 마지막으로 저장된 스폰 지점에 다시 나타납니다.
사울로는 가장 어려운 문제가 선수들을 연결하는 것이 아니라 상태를 다루는 것이었다고 말합니다.
"싱글 플레이 게임에서는 일들이 특정한 순서로 일어난다는 것을 확실히 알 수 있습니다."라고 그가 말합니다. Multiplayer 누군가 중간에 참여하면 변수와 객체의 상태가 정확히 어떨지 절대 알 수 없습니다. 객체는 잘못된 상태에서 호출될 경우 무엇을 해야 하는지 알아야 한다.

딥 디쉬 던전 | 비홀드 스튜디오 | 로우 퓨리
Vivox로 음성을 메커니즘으로 만들기
많은 협동 플레이어들이 이미 음성 채팅을 위해 Discord와 같은 도구를 사용하고 있지만, 사울로는 던전 탐험 경험 자체에 음성을 통합하고 싶었기 때문에 Vivox를 선택했습니다.
"저는 플레이어들이 던전을 느끼고, 던전의 외로움도 느끼기를 바랐습니다."라고 그는 말합니다. 그들이 Friends 뒤처지고 있다고 느끼게 하고 싶었다.
Deep Dish Dungeon의 목소리는 위치 기반이며 각 플레이어 주변 공간에 의해 필터링됩니다. 던전 곳곳에 설치된 약 15개의 인터콤 스피커를 사용하여 플레이어의 목소리를 모두에게 방송할 수 있습니다. 이것은 한 친구가 캠프에서 요리하는 동안 다른 친구가 채집하러 나가고 보급품을 위해 무전으로 연락하게 해줍니다. 말하는 것도 적들이 반응하는 소음에 포함되며, 이는 점프하거나, 횃불을 휘두르거나, 갑옷을 부딪히는 것과 같습니다.
"이제 선수들은 그 기능을 어떻게, 언제 사용할지 생각하고 있습니다."라고 사울로가 말합니다. "그것은 상호작용에 많은 층을 더합니다."

딥 디쉬 던전 | 비홀드 스튜디오 | 로우 퓨리
Analytics를 활용하여 게임플레이 개선
Deep Dish Dungeon은 지도도 없고 나침반도 없으며 대부분의 장애물에 여러 가지 해결책이 있는 비선형 샌드박스입니다. 그것이 플레이 테스트를 어렵게 만들었습니다. "우리가 누군가 플레이하는 것을 볼 때마다, 그들은 다르게 행동했다"고 사울로는 말합니다.
그는 그 자유를 중심으로 Unity Analytics 전략을 구축했다. 이것은 아이템이 게임을 통해 어떻게 이동하는지 추적하며, 플레이어의 인벤토리 식사 여부와 함께 각 피격, 전투 조우 및 사망을 기록합니다. 마지막 데이터 포인트가 중요했던 것으로 밝혀졌습니다.
"딥 디쉬 던전에서 음식은 회복 물약이 아닙니다." "그건 근육질이야."라고 그가 말한다. 배고픈 채로 탐험하는 플레이어들을 많이 봤는데, 이들이 게임이 너무 어렵다고 보고하는 플레이어들이었습니다.
이 발견은 새로운 게임플레이 시스템의 탄생으로 이어졌습니다. 그것은 음식을 너무 오래 먹지 않으면 플레이어의 HP를 소모하는 허기 게이지입니다. 이 메커니즘 덕분에 플레이어들은 던전에 들어가기 전에 왜 식사를 해야 하는지 더 쉽게 이해할 수 있습니다.

Deep Dish Dungeon 데모용 Analytics 대시보드
진단으로 버그 잡기
자체 QA 팀이 없을 때 출판사인 Raw Fury가 합류하기 전까지, 사울로는 자신의 기계에서 재현할 수 없는 충돌과 오류를 찾기 위해 진단을 사용했습니다. 또한 빈도와 플랫폼별로 순위를 매기는 데 도움이 되었습니다.
한 보고서는 선수들이 적을 공격할 수 없다고 말하는 것으로 시작되었습니다. "공격은 잘 되고, 적도 잘 되고 있는데, 무슨 일이지?" 사울이 말합니다. 진단 데이터는 더 일찍 시작된 일련의 사건을 보여주었는데, 인벤토리 목록이 더 이상 존재하지 않는 품목을 참조하고 있었습니다. 우리는 그 문제를 훨씬 더 일찍 잡을 수 있었을 거예요.

Deep Dish Dungeon 데모용 진단 대시보드
Unity 6.3에서 멀티플레이어 테스트하기
솔로 프로그래머에게 Multiplayer 테스트 세션을 설정하는 것은 많은 시간이 걸릴 수 있습니다. Unity 6.3에서 Multiplayer Play Mode가 대부분의 작업을 제거했습니다. Saulo는 Unity 에디터 전체 던전 또는 전용 테스트 씬에서 두세 개의 클라이언트를 동시에 실행하며 플레이 모드로 진입할 수 있습니다.
"버튼을 누르면 게임 내 어디에서든 두세 명의 플레이어와 테스트할 수 있습니다."라고 그가 말합니다. 그리고 로컬 게임을 실행하는 것은 Relay Lobby 실행하는 것과 거의 같습니다. 같은 코드예요.
Unity 6.3의 향상된 안정성도 중요했습니다. 사울로는 이전 버전에서 거의 매일 충돌이 발생했던 것을 기억합니다. Unity 2023으로 업그레이드한 후 Unity 6으로 업그레이드했을 때, 그는 "크래시가 난 지 한 달이 넘었다는 것을 깨닫는 데 시간이 걸렸다"고 회상합니다.
Localization 패키지를 사용하여 번역하기
Behold Studios의 이전 게임들은 서드파티 Localization 플러그인에 의존했는데, 이는 항상 새로운 Unity 버전을 따라가지 못했습니다. 이번에는 팀이 Unity 6의 Localization package를 사용했습니다. Google Sheets와 동기화되는 문자열 테이블과 첫 번째 글꼴이 언어를 렌더링할 수 없을 때 두 번째 글꼴을 시도하는 글꼴 폴백 체인을 제공합니다. 딥 디쉬 던전이 11개 언어로 출시됩니다: 영어, 브라질 포르투갈어, 프랑스어, 독일어, 스페인어, 라틴 아메리카 스페인어, 폴란드어, 러시아어, 일본어, 그리고 중국어 간체 및 번체.
사울의 조언은 가능한 한 빨리 장기 번역을 계획하는 것입니다. "초기에 Localization 대해 생각하고 이미 그것을 고려한 UI를 만드는 것이 매우 현명하다"고 그는 말합니다.

딥 디쉬 던전 | 비홀드 스튜디오 | 로우 퓨리
작별 조언
소규모 팀이 온라인 Multiplayer 고려할 때, 사울로의 주요 조언은 기술이 아닌 디자인에 관한 것입니다.
클라이언트를 신뢰할 수 있는 게임을 만드세요. 협동 게임을 만드세요. "지연 시간이 문제가 되지 않는 게임을 만들었는데, 500밀리초의 지연 시간이 있어도 디자인 덕분에 게임이 작동합니다."라고 그는 말합니다. "디자인적인 면과 생산적인 면에서, 이것이 실제로 사용할 기술보다 더 중요합니다."