🛠️ 메가시티 메트로와 네코드 폴 엔티티 소개 세션 개요
![](https://blog.kakaocdn.net/dn/bLMV1H/btsL9rwFq22/z4s1Mu52oHJAurqGMUQaW0/img.jpg)
-
유니티코리아 테크니컬 어카운트 매니저 신호와 유니티 게이밍 서비스에서 기술 지원을 맡고 있는 조이가 세션을 진행함.
-
메가시티 메트로 프로젝트를 활용하여 네코드 폴 엔티티와 멀티플레이어 게임 제작의 기본 개념을 설명할 예정임.
-
데모에서는 네코드 폴 엔티티의 네트워크 오브젝트 구성 및 동기화 방식을 다루며, 유용한 디버깅 도구 역시 소개될 것이다.
-
세션은 유니티가 제공하는 멀티플레이어 지원 서비스를 이용한 게임 서버와 클라이언트의 네트워킹 방법으로 마무리될 예정임.
-
세션의 메인 주제는 ECS 환경에서 동작하는 네코드 폴 엔티티이며, ECS에 대한 깊이 있는 내용이 아니므로 누구나 이해할 수 있도록 진행됨.
🚄 메가시티 메트로의 기능 및 구조
![](https://blog.kakaocdn.net/dn/smCFc/btsL86M31PX/4SFKesw8Jp89MccGiuueb0/img.jpg)
-
메가시티 메트로는 유니티의 최신 멀티플레이어 샘플로 알려져 있다.
-
이 프로젝트는 유니버셜 렌더 파이프라인을 통해 렌더링을 진행하며, 레코드와 유니티 게임 서비스를 사용하여 온라인 연결이 이루어진다.
-
레드포 엔티티를 네트워킹 라이브러리로 활용하여 게임 서버 호스팅을 통해 실제 게임 빌드와 클라이언트의 네트워크 플레이를 지원한다.
-
이 시스템에서는 120명 이상의 플레이어가 하나의 세션에서 동시에 게임을 진행할 수 있다.
-
또한, 각 플레이어는 음성 채팅 기능을 통해 소통할 수 있도록 설계되어 있다.
-
최종적으로 이 프로젝트는 윈도우, 맥, 모바일 클라이언트에서 플레이할 수 있도록 구성되어 있다.
🚀 멀티플레이어 게임 제작의 기본 개념
![](https://blog.kakaocdn.net/dn/br0Krx/btsL8FPVVft/Bl13yYkEpnojHtGNAksgv0/img.jpg)
-
멀티플레이어 게임 제작을 위해서는 계층 구조를 이해해야 하며, 크게 게임 플레이 계층, 넷코드 계층, 전송 계층의 세 가지로 나뉜다.
-
게임 플레이 계층은 싱글 플레이어 게임을 만드는 데 사용되며, 게임 세계의 렌더링, UI 및 입력 처리, 물리 시뮬레이션 등을 담당한다.
-
넷코드 계층은 사용자의 조작을 기록하고, 게임 플레이 계층에서 필요한 정보를 가져오는 역할을 한다.
-
전송 계층은 넷코드 계층에서 전달된 정보를 다른 사용자나 기기로 전달하는 역할을 하며, 그 외의 세부 사항은 다루지 않는다.
-
각 계층은 유니티 제품에 따라 메가시티 프로젝트의 엔티티 패키지와 네코드 폴 엔티티로 치환될 수 있다.
🎮 멀티플레이어 토폴로지 및 네트워크 처리 개념
![](https://blog.kakaocdn.net/dn/FoJXv/btsL7C7wH3f/y6VyP6DAkayIjpfhVQISYK/img.jpg)
-
멀티플레이어 토폴로지에는 클라이언트 호스팅과 데디케이티드 서버 형태가 있으며, 클라이언트 호스팅에서는 클라이언트가 호스트 역할을 하며 모든 연산을 수행한다.
-
데디케이티드 서버 토폴로지에서는 별도의 서버가 게임 로직을 처리하고 클라이언트는 결과를 동기화하여 수신한다.
-
메가시티의 구조는 클라이언트 호스팅과 데디케이티드 서버를 모두 지원하며, 서버 오소리티 형태로 운영된다.
-
멀티플레이어 상황에서 네트워크 트래픽이 증가하게 되는데, 플레이어 수의 제곱에 따라 복잡도가 증가하며 이는 고스트 개념으로 해결된다.
-
고스트는 서버가 관리하는 네트워크 객체로, 서버가 클라이언트에게 고스트 상태의 스냅샷을 전송하여 최신 상태를 유지시키는 역할을 한다.
-
멀티플레이어 토폴로지에는 클라이언트 호스티드 게임과 데디케이티드 서버 게임이 있다.
-
클라이언트 호스티드 토폴로지에서는 한 클라이언트가 호스트 역할을 맡아 서버와 클라이언트 역할을 동시에 수행한다.
-
이때 호스트는 모든 권한을 가지고 연산을 수행하며, 결과를 다른 클라이언트에게 전파한다.
-
데디케이티드 서버 토폴로지는 별도의 서버에서 게임 서비스를 처리하고 클라이언트에게 결과를 동기화하는 방식이다.
-
메가시티는 클라이언트 호스티드와 데디케이티드 서버 토폴로지를 모두 지원하며, 서버 오소리티 형태로 서비스가 운영된다.
-
메가시티 매트로 프로젝트의 시현을 위해 다운로드가 필요하다.
-
지정된 URL에 접속하면 메가시티 매트로 프로젝트의 간략한 소개를 확인할 수 있다.
-
'게더 데모' 버튼을 클릭하면 기터브 레포지토리에 접근할 수 있다.
-
긴 URL을 복사하여 프로젝트를 클론하면 로컬 환경에 프로젝트를 다운로드할 수 있다.
-
발표자는 이미 미리 프로젝트를 준비해 두었다고 언급하였다.
-
프로젝트는 메인 신 내에 여러 가지 서브 신들을 포함하고 있으며, 각각의 신은 레벨 구성과 플레이어 구성을 위한 정보를 담고 있다.
-
레벨 신 내부에는 스폰 포인트라는 게임 오브젝트들이 무작위로 우주선을 생성하기 위해 배치되어 있다.
-
플레이어 세션에는 비클 스포너가 포함되어 있어, 싱글 플레이와 멀티플레이어에 따라 각각의 프랩을 사용하여 우주선을 생성하는 구조이다.
-
게임 플레이는 메인 메뉴로 시작되며, 싱글 플레이 버튼을 누르면 간단한 튜토리얼이 진행된다.
-
플레이어 객체의 구성 요소에는 속도 방향 정보와 레이저 데미지 관련 컴포넌트가 포함되어 있으며, 멀티플레이어 개체는 추가적으로 고스트 호링 컴포넌트를 포함하고 있다.
-
게임에서 플레이어가 하나인 경우에는 네트워크 트래픽이 발생하지 않지만, 플레이어 수가 증가함에 따라 네트워크 트래픽과 복잡도가 기하급수적으로 증가하게 된다.
-
네코드 포 엔티티는 고스트라는 개념을 도입하여 서버가 관리하는 네트워크상의 엔티티를 사용하고, 서버가 정기적으로 클라이언트에게 스냅샷을 보내 동기화를 진행한다.
-
클라이언트는 서버로부터 수신한 고스트 스냅샷을 통해 현재 화면의 상태를 유지하며 동기화 과정에 들어간다.
-
고스트 객체의 포스는 상대적인 중요도를 나타내며, 게임 내 데이터가 동기화되지 않는 상황에서 먼저 동기화해야 할 데이터의 우선순위를 정하는 데 도움을 준다.
-
두 가지 모드, 인터폴레이트와 프리드,를 통해 클라이언트에서 더 유연하게 렌더링을 할 수 있도록 하고, 이들은 데이터 예측 방식에 차이가 있다.
-
멀티플레이어 게임에서 더미 클라이언트를 생성하여 함께 테스트할 수 있는 기능이 있으며, 이를 통해 여러 개의 우주선이 생성된다.
-
플레이어 비이클 인풋 시스템과 별도로 심플레이에 대한 입력 시스템이 존재하여 무작위로 위치 이동하는 코드가 포함되어 있다.
-
네트워크 에뮬레이션 기능을 통해 실제 플레이 환경에서 발생할 수 있는 다양한 네트워크 이슈를 시뮬레이션할 수 있는 옵션이 제공된다.
-
레이턴시, 핑, 로스 값을 커스터마이징하여 네트워크 상태를 조정할 수 있으며, 인터넷이 없는 상태에서 게임을 테스트할 수 있다.
-
프레임 드랍 테스트를 통해 네트워크 문제 발생 시 플레이어가 겪는 게임 경험을 분석하고 최적화 방법을 찾아볼 수 있다.
🎮 멀티플레이 서비스 연결 및 빌드 과정
![](https://blog.kakaocdn.net/dn/bpPuMP/btsL7EKW79f/eFE8QJpkgbGNmIKR8Gdqb1/img.jpg)
-
게임을 온라인화하기 위해 멀티플레이 서비스를 연결하는 작업을 시작하는 단계이다.
-
프로젝트와의 링크는 대시보드를 통해 진행되며, 생성된 프로젝트가 게임에 연결된다.
-
데디케이티드 서버를 위한 빌드를 생성하기 위해, 현재 플랫폼에 맞는 빌드 설정과 생성 과정을 거쳐야 한다.
-
빌드 파일을 게임 서버 호스팅 시스템에 업로드하는 과정이 있으며, 여러 가지 업로드 방법이 지원된다.
-
빌드 컨피규레이션을 하고 나면, 서버 준비 상태와 플레이어 요청 처리 등을 위한 추가 설정이 필요하다.
-
게임을 온라인화하기 위해 멀티플레이 서비스 연결 작업을 시작한다.
-
어비스에서 프로젝트를 연결할 수 있으며, 기존 프로젝트의 링크도 가능하다.
-
링크 버튼을 눌러 유니티 대시보드에 생성된 프로젝트를 게임에 연결한다.
-
빌드 세팅에서 멀티플레이 서버 호스팅을 위한 빌드를 생성해야 한다.
-
데디케이티드 서버 설정 시 지원되는 플랫폼을 선택하고 빌드 파일을 생성한다.
-
게임 서버 호스팅을 위해 미리 준비된 빌드를 업로드해야 하며, 이 과정에서 네 가지 업로드 방식이 지원된다.
-
업로드 방식으로는 로컬 PC에서 파일을 올리거나, 아마존 S3 및 구글 클라우드 스토리지에 업로드하는 방법이 있다.
-
빌드 업로드 후, 서버와의 싱크 과정이 필요하며, 이 과정이 완료되어야 빌드 컨피규레이션 설정이 가능하다.
-
클라이언트와 서버 간의 정보를 쿼리하기 위해 SQP 설정이 필요하며, 이를 통해 서버 IP 및 플레이어 연결 상태를 확인할 수 있다.
-
서버가 부팅되는 동안 플레이어 요청을 대기하도록 설정하는 기능을 통해, 서버의 안정성을 높일 수 있다.
-
릿은 같은 빌드 구성을 공유하는 서버들의 집합으로 정의되며, 이로 인해 플릿을 생성할 때 이름과 타입을 설정해야 한다.
-
로케이션은 최적의 조건을 갖춘 서버를 매칭하기 위해 사용되며, 레저베이션 모델은 플레이어가 원하는 서버를 특정하여 예약하는 방식으로, 매치 메이커를 사용하지 않는 환경에 적합하다.
-
얼로케이션 모델은 플릿이 여러 빌드 구성을 동시에 사용하는 반면, 레저베이션 모델은 하나의 플릿이 하나의 빌드 구성만 사용하는 제약이 있다.
-
민 어베일러블 서버는 리전에서 항상 가용한 최소 서버 수를 설정하여, 클라우드 머신의 무한 생성 방지를 위한 지침을 제공한다.
-
테스트를 통해 서버 빌드가 제대로 작동하는지 확인하고, 실패 시 게임플레이에서도 서버가 로케이션 되지 않을 가능성이 있으므로 사전에 테스트하는 것이 중요하다.
-
큐 생성은 오버뷰 인그레이를 통해 가능하며, 최대 플레이어 수는 12명으로 설정해야 한다.
-
기본적으로 풀이 생성되지 않으면 인밸리드 오류가 발생하며, 풀이 생성이 필수적이다.
-
QOS(퀄리티 오브 서비스) 리전 설정을 통해 최적의 서버 연결을 위한 레이턴시 값을 계산하여 반환한다.
-
매치 룰 설정에서는 백필 UN을 통해 매치된 플레이어 추가를 설정하고, 허용 여부를 트루로 설정한다.
-
설정이 완료되면 큐와 풀이 생성되며, 매치메이커 설정이 완료된다.
-
게임 플레이에서 매치 메이킹을 통해 세션에 참여하는 과정을 시연하며, 조건을 충족하면 빠르게 들어올 수 있다고 설명한다.
-
게임 진행 중 네트워크 에뮬레이션이 활성화되어 있어, 약간의 지연이 발생한다고 언급한다.
-
매치된 상태에서 대시보드에서는 플레이어 기록과 CPU 메모리 사용량 같은 정보를 확인할 수 있다.
-
대시보드의 이벤트 섹션에서는 서버의 시작과 종료 시간, 상태 변경 사항을 확인할 수 있는 기능을 제공한다.
-
서버의 로그 파일 및 관련 정보를 확인하고 다운로드할 수 있는 기능에 대한 설명이 이루어진다.
🎮 메가시티 메트로와 네코드 폴 엔티티의 세션 정리
![](https://blog.kakaocdn.net/dn/baiVar/btsL8IFUGnb/l15Nf5LnH3wFj2VcyhiQOk/img.jpg)
-
세션에서 메가시티 메트로와 네코드 폴 엔티티에 대해 중점적으로 다루었지만, 게임 서브 호스팅과 매치 메이커 주제도 강조되었다.
-
발언자는 처음으로 진행하는 세션에 대해 떨리면서도, 유니티 게이밍 서비스에서 지원하는 게임 서버 호스팅 및 매치메이커 부분을 상세히 설명할 수 있어 기뻤다고 하였다.
-
앞으로도 이런 세션을 많이 열 예정이니, 지속적인 관심을 부탁한다고 전하였다.
-
긴 시간 동안 시청해 주셔서 감사하다는 인사를 전하였다.