유니티스퀘어 | Unity Korea 공식 리소스 허브

본문내용 바로가기 주메뉴 바로가기
닫기

유니티 스퀘어

Survival Kids의 분할 화면 및 GameShare 네트워킹

관련주제
  • #Game
  • # Unity6
  • # 멀티플레이
  • # 네트워크
  • # GameShare
  • # Netcode for Entities
  • # Relay
2025.10.15



올여름, 유니티는 퍼블리셔 파트너 KONAMI와 긴밀히 협력하여 자체적으로 개발한 첫 번째 게임을 출시했습니다. Survival KidsNintendo Switch™ 2 출시 첫날 발매된 타이틀로, 어린이용 고전 게임을 더 재미있게 업데이트한 작품입니다.

이 게임은 전적으로 Unity 6를 기반으로 제작되었기 때문에 개발 팀은 새로운 플랫폼에 게임을 출시하기 위해 새로운 소프트웨어를 다루어야 했으며, 이는 큰 도전이기도 했습니다. 그뿐만 아니라 이 게임은 다양한 네트워크 환경에서 즐길 수 있기 때문에, 프로젝트에 참여한 소규모 유니티 팀은 이러한 옵션을 지원할 수 있는 강력한 멀티플레이어 아키텍처를 구축해야 했습니다.

Survival Kids의 멀티플레이어 네트워킹 시리즈 첫 번째 편을 확인해 보세요. 게임의 네트워크 아키텍처가 어떻게 구성되었는지에 대한 기본적인 내용을 알아볼 수 있습니다. 이번 게시물에서는 더 나아가 게임의 화면 분할과 Nintendo Switch 2의 GameShare 기능을 어떻게 구축했는지 설명합니다.

Nintendo Switch는 Nintendo의 상표입니다.

Survival Kids의 게임플레이
Survival Kids의 게임플레이

게임의 네트워크 아키텍처에서 많은 문제를 해결한 뒤, 팀은 화면 분할을 어떻게 구현할지 고민하기 시작했습니다. 이는 Netcode for Entities에서 기본적으로 제공되지 않는 기능이었기 때문에 또 다른 과제였습니다. 화면 분할을 사용할 경우 플레이어가 2명 이상이어야 하지만, 이 플레이어들은 하나의 클라이언트에 속합니다.

Netcode for Entities는 클라이언트당 1명의 플레이어가 있다고 가정합니다. 따라서 별도의 게임이 있고 콘솔이 해당 게임에 연결된다면 플레이어는 1명인 것입니다. 그런데 이 전제가 깨지고 실제로 2명이나 3명의 플레이어가 존재할 경우, 각 플레이어의 입력을 개별적으로 전송할 방법이 없으며 하나로 묶어 전송해야 합니다.

그래서 팀에서는 아무도 볼 수 없는 가상 입력 플레이어를 만들었습니다. 이 플레이어는 전혀 보이지 않지만, 최대 4명의 로컬 플레이어 입력을 모두 수집합니다(결과적으로 4인 분할 화면은 구현하지 않음). 이 가상 플레이어는 들어오는 모든 입력을 관리하고 프레임마다 서버에 전송합니다.

게임에서 플레이어는 자신의 입력을 직접 관리하지 않으며 가상 입력 플레이어가 프레임에 대한 입력을 알려 줍니다. 기존의 Netcode for Entities는 한 플레이어가 자신의 입력을 직접 받아서 그 입력으로 모든 움직임을 처리한다고 가정합니다. 하지만 여기서는 움직임이 없는 다른 플레이어가 존재하며, 이 플레이어가 다른 모든 입력을 보관해 줍니다.

화면 분할은 네트워크 관점에서 주요한 과제였습니다. 여러 카메라 관련 문제를 피하기 위해, 처음에는 두 번째 플레이어가 움직이되 카메라는 첫 번째 플레이어를 따라가도록 했습니다. 이 방식은 꽤 빠르게 작동했지만 곧 또 다른 문제에 부딪혔습니다. 두 번째 카메라는 어떻게 설정해야 할까요? 왼쪽 화면에는 첫 번째 카메라, 오른쪽 화면에는 두 번째 카메라를 배치하려면 어떻게 해야 할까요? UI 문제도 해결해야 했습니다. 일부 UI는 특정 플레이어만 볼 수 있어야 하기 때문입니다. 예를 들어 한 플레이어가 통나무 앞에 있으면 ‘X를 눌러 통나무를 집으세요’라는 작은 프롬프트 버튼이 떠야 하지만, 다른 플레이어는 이 프롬프트가 보이면 안 됩니다.

다른 플레이어가 근처에 있을 때 UI를 보지 못하도록 숨기는 방법을 알아내야 했죠. 이 문제를 해결하기 위해 레이어를 사용했지만, 이는 네트워크보다는 UI에 더 가까운 수정 사항이었습니다. 궁극적으로는 게임을 플레이어 2인 분할 화면으로 제한하기로 결정했습니다. 대형 화면이라 해도 로컬 플레이어가 최대 2명일 때 더 나은 게임플레이 경험을 제공할 수 있다고 판단했기 때문입니다. 내부적으로는 4인용까지 분할 화면을 구현할 수 있었으며, 실제로 한동안은 그렇게 유지했습니다. 플레이어가 늘어날수록 처리해야 할 프로세스, 렌더링, 시뮬레이션해야 할 플레이어가 많아져서 성능에 대한 스트레스 테스트를 진행할 수 있는 좋은 방법이었기 때문입니다.

Survival Kids의 게임플레이
Survival Kids의 게임플레이

Nintendo Switch 2용 게임 개발에서 구현된 기능 중에는 GameShare도 있습니다. 사실상 다른 콘솔에 동영상 피드를 전송하는 기능으로, 네트워크 관점에서는 화면 분할과 다르지 않습니다. 단지 화면에 렌더링하는 대신, 한쪽 카메라를 다른 콘솔로 전송하는 방식일 뿐입니다.

4인 화면 분할은 GameShare 모드에 대한 기본적인 접근법이 되었습니다. 성능이 양호하고 해당 콘솔로 동영상을 스트리밍할 수 있다면 원하는 만큼 많은 플레이어를 연결할 수 있습니다. 하지만 4인 화면 분할을 원하지 않았던 주된 이유는 바로 화면 크기입니다. 대형 TV가 아니라면 분할된 화면을 보기 힘들기 때문입니다. 하지만 각자 자신의 콘솔을 가지고 있다면 그쪽으로 동영상을 스트리밍할 수 있습니다.

팀에서는 GameShare에서 세 번째 플레이어까지 지원할 수 있도록, 2인 분할 화면 모드와 차별화를 두기 위해 많은 노력을 기울였습니다. 3인 분할 화면 모드는 호스트 한 명과 게스트 두 명을 둘 수 있으며, 여전히 플레이어에게 양질의 경험과 매끄러운 성능을 제공할 수 있습니다. 결과적으로 품질 면에서 기준을 낮추지 않고도 분할 화면 아키텍처를 활용하여 GameShare를 구현할 수 있었습니다.

팀에서 추가한 기능 중 정말 유용했던 것은 디버그 커맨드였습니다. 개발자 메뉴가 있어서 버튼을 누르면 메뉴를 불러오고 커맨드를 입력할 수 있습니다. 이 기능은 많은 디버그 작업을 실행할 수 있다는 점에서 편리했습니다. 물론 최종 출시된 게임에서는 전부 제외되었기 때문에, 실제로 사용자가 구매하고 플레이하는 게임에서는 사용할 수 없습니다. 또한 분할 화면 모드 중에는 메인 플레이어를 복제할 수 있는 기능이 있었는데, 이를 통해 하나의 컨트롤러로 두 플레이어를 동시에 조작하는 분할 화면을 구현할 수 있었습니다. 많은 컨트롤러를 사용하지 않고도 분할 화면을 테스트하는 효과적인 방법이었으며, 이를 통해 테스트를 더 수월하게 진행할 수 있었습니다.

또한 팀이 작성한 일반 네트워킹 코드가 분할 화면 설정에서 모두 효과적으로 실행되었습니다. 플레이어들이 서로 분리되어 있었기 때문에, 온라인 게임이 어떻게 작동하는지 보여주는 정보가 서버에서 전송되었습니다. 한편 다른 클라이언트에 플레이어를 연결하지 않고도, 에디터에서 다른 컨트롤러로 화면 분할 모드를 실행해 게임을 플레이하여 멀티플레이어 모드에서 코드가 작동하는지 테스트할 수도 있었습니다. 분할 화면을 일반 온라인 게임의 대체로 사용해 코드를 테스트할 수 있었기 때문에 새로운 빌드를 만들 필요가 없었습니다.

그 밖에도 정말 유용하다고 생각한 다른 Unity 툴이 두 가지 더 있었는데, 프로젝트 막바지에 이르러서야 사용할 수 있었습니다. Unity 6에는 별도의 플레이어 빌드 없이 테스트를 수행할 수 있는 새로운 Multiplayer Play Mode 툴이 포함되어 있습니다.

에디터를 열고 클린 플레이어 빌드를 만들려면 아트 리소스와 기타 데이터가 너무 많기 때문에 한 시간 이상이 소요됩니다. 따라서 원격 플레이어로 코드를 테스트하려면 최소한 그만큼 기다려야 합니다. 특히 반복 작업(iteration)에 적합하지 않죠. 하지만 Multiplayer Play Mode를 사용하면 또 다른 에디터의 가상 버전처럼 새로운 창을 띄우고 연결할 수 있습니다.

Netcode for Entities는 상태가 좋지 않은 네트워크 연결을 시뮬레이션할 수 있는 플레이 모드 툴도 있습니다. 예를 들면 핑을 300밀리초로 설정하여, 공항에서 친구가 휴대폰을 노트북에 테더링해서 게임에 접속했을 때처럼 아주 느린 왕복 지연을 시뮬레이션할 수 있습니다. 그런 다음 에디터에서 이를 테스트하여 얼마나 지연되거나 불안정한지 확인할 수 있습니다. 데이터 손실이나 패킷 드롭이 발생하는 네트워크 연결에서 작동하지 않는 경우도 있는데, 그러한 상황도 손쉽게 시뮬레이션할 수 있었습니다.

이 테스트는 상시로 진행했습니다. 한동안은 시뮬레이터를 끄고는 에디터에서 플레이하지 못하도록 내부 규칙으로 정해 놓기도 했으며, 모든 사람이 어떤 형태로든 지연을 시뮬레이션한 상태에서만 플레이해야 했습니다. 실제로 완벽한 네트워크 환경에서 플레이하는 사용자는 없기 때문입니다. 이렇게 한 덕분에 사무실의 초고속 인터넷 환경이 일반적인 환경이라고 착각하지 않을 수 있었습니다.

결국 이 모든 테스트는 결실을 맺었으며, 다양한 네트워크와 멀티플레이어 설정에서 60fps로 매끄럽고 우수한 성능의 게임을 제공할 수 있었습니다. 몇 주 전 게임이 출시된 이후 플레이어들이 LobbyRelay를 통해 온라인에서 계속 게임을 즐기고 있는 것을 보았습니다. 플레이어들이 집 네트워크 환경과 관계없이 원활하고 안정적인 게임 경험을 누리고 있기를 바랍니다.

유니티 블로그 시리즈의 다른 게시물을 읽고 Survival Kids 제작 과정에 대해 자세히 알아보세요.
- ‘Survival Kids의 멀티플레이어 네트워크 인프라 자세히 알아보기’

리소스 페이지에서 Unity로 제작된 프로젝트에 대해 자세히 알아보세요.
 














Unity Square 로그인
Unity MWU Korea Awards 2021 TOP 36 투표와 관련하여, 본인의 개인정보를 유니티테크놀로지스코리아 유한회사(이하 ‘회사‘)에서 수집 및 이용하는 것에 대해 동의합니다.

- 단, 관계법령의 규정에 의하여 보전할 필요가 있는 경우, 일정 기간 동안 개인정보를 보관할 수 있습니다. 그 밖의 사항은 회사의 개인정보취급방침을 준수합니다.
- 개인정보 수집/이용에 동의하지 않을 수 있으나, 미동의시 이벤트에 참여가 불가능합니다.
개인정보 수집 항목 이름, 휴대폰번호, 이메일
수집 목적 어뷰징 등을 통한 부정 투표 방지 및 이벤트 당첨, 경품 발송
보유기간 투표 종료 후 3개월 이내 파기
본 이벤트의 당첨자 추첨 및 배송, 응모 및 당첨자 경품 배송관련 상담 업무 등은 슈퍼와이 주식회사, 피엠지 아시아에 위탁됩니다.

- 개인정보 수집/이용에 동의하지 않을 수 있으나, 미동의시 이벤트에 참여가 불가능합니다.
위탁업체명 위탁업무
슈퍼와이 주식회사 TOP 36 투표 참여자 정보 처리 및 관리
피엠지 아시아 TOP 36 투표 참여자 문의/답변 대응 및 경품 발송
확인 발표자료 신청하기
닫기