[UNITY]Unity 6로 멀티플레이어 게임 제작 가속화, 요약 정리

🎮 멀티플레이어 게임 제작의 세 가지 계층 구조

 

  • 멀티플레이어 게임을 개발하기 위해서는 세 가지 계층 구조가 필요하다.

  • 첫 번째 게임 플레이 계층은 싱글 플레이어 게임 개발 시 사용하며, 게임 세계의 렌더링, UI 및 입력 처리를 담당한다.

  • 두 번째 네트워크 계층은 멀티플레이어 기능을 위한 필수 정보를 기록하며, 네트워크 동기화를 위한 정보를 다룬다.

  •  
  • 세 번째 전송 계층은 다른 사용자나 기기로 정보를 전달하는 역할을 한다.

  • 유니티의 구성 요소는 각 계층의 기능을 지원하며, 특히 네트워크 4 게임 오브젝트가 중요한 역할을 한다.

 

🕹️ 멀티플레이어 토폴로지의 종류

 

  • 클라이언트 호스티드 토폴로지는 게임에 접속한 클라이언트 중 하나가 호스트 역할을 수행하며 서버와 클라이언트 권한을 동시에 가지는 구조이다.

  • 해당 구조에서 서버는 모든 권한을 delegado 하며, 모든 연산이 호스트에서 수행되어 결과가 다른 클라이언트에게 전파된다.

  • 데디케이티드 서버 토폴로지는 별도의 서버가 게임 서비스 로직을 처리하고, 클라이언트는 이 결과를 받아 동기화하는 방식이다.

  • 디스트리뷰티드 어소리티 토폴로지에서는 클라이언트들이 네트워크에서 오브젝트의 소유 및 상태 추적에 대한 권한을 공유하며, 시뮬레이션 권한을 분산해서 소유하게 된다.

  • 중앙 서버 없이 클라이언트가 직접 시뮬레이션을 실행하고, 중앙 상태 서비스가 오브젝트 상태 변경 사항을 추적하며 네트워크 트래픽을 관리한다.

 

🚀 유니티 6을 사용한 멀티플레이어 게임 제작 준비

  • 유니티 프로젝트를 생성할 때는 유니티 6 버전을 사용하는 것이며, 가급적 최신 버전을 사용하는 것이 권장된다.

  • 프로젝트 생성 시, '커넥트 투 유니티 클라우드' 체크박스를 선택하면 클라우드 프로젝트가 자동으로 생성된다.

  • 패키지 매니저에서 '이네이블 프리릴리즈 패키지' 체크박스를 활성화해야 프리릴리즈 기능을 사용할 수 있다.

  • '멀티플레이어 센터'에서는 게임 장르와 플레이어 수를 설정하여, 적절한 멀티플레이어 기능을 추천받을 수 있다.

  • 설치할 패키지는 멀티플레이어 툴, 음성 및 텍스트 통신 솔루션 등으로 구성되어 있으며, 이는 네트워크 게임 개발에 필수적이다.

 

🚀 Unity 6의 멀티플레이어 기능 소개

  • Unity 6에서는 코드 작업 없이 호스트클라이언트 역할을 선택하여 멀티플레이어 게임을 쉽게 시작할 수 있다.

  • 새로운 티 플레이어 플레이 모드 기능으로 최대 네 개의 가상 플레이어를 동시에 띄워 테스트할 수 있다.

  • 네트워크 매니저는 게임 오브젝트를 생성하고 관리하는 허브 역할을 하며, 호스트와 클라이언트 간의 연결을 담당한다.

  • 네트워크 오브젝트 컴포넌트는 객체를 식별하고 데이터 통신을 위해 사용되며, 각 객체는 고유 번호를 가지게 된다.

  • 유니티 6를 사용하면 세션 로비 기능을 통해 다른 사용자와 손쉽게 게임 방을 생성하고 플레이할 수 있어 멀티플레이어 게임 제작이 용이해진다.

4.1. Unity 멀티플레이어 게임 기본 설정
  • 코드 작업 없이 게임 설정을 할 수 있는 인터페이스가 제공된다.

  • 호스트로 게임을 시작하면 큐브가 나타나며, 화면에서 이동하는 기능을 실험할 수 있다.

  • 기본적인 멀티플레이어 기능이 활성화되지만, 게임의 상호작용이 부족하다는 점이 지적된다.

  • 플레이어 간의 같이 플레이하는 기능을 구현하기 위해서는 추가적인 클라이언트 접속 준비가 필요하다.

4.2. 유니티 6의 멀티플레이어 기능 소개
  • 유니티 6에서는 티 플레이어 플레이 모드라는 기능이 추가되어, 별도의 클라이언트를 컴파일하지 않고도 여러 플레이어를 동시에 테스트할 수 있다.

  • 사용자는 메인 에디터 외에 추가적인 가상 플레이어 에디터를 통해 수정 사항을 실시간으로 반영하며 플레이 테스트를 진행할 수 있다.

  • 최대 네 개의 가상 클라이언트를 띄워서 테스트할 수 있으며, 각 클라이언트의 역할(서버 또는 클라이언트)을 선택할 수 있다.

  • 호스트와 클라이언트로 설정한 두 가상 플레이어는 서로 접속하여 함께 플레이할 수 있는 기능이 제공된다.

  • 모든 플레이어는 한 화면에서 동시에 플레이하는 모습을 확인할 수 있다.

4.3. 네트워크 매니저와 네트워크 오브젝트의 역할
  • 네트워크 매니저는 네트워크 게임 제작을 위한 허브 역할을 하며, 각 기기에는 단일 네트워크 매니저가 존재한다.

  • 모든 네트워크 매니저는 게임에서 사용할 게임 오브젝트를 생성하고, 전체적인 관리 기능을 수행한다.

  • 유니티 트랜스포트 컴포넌트가 포함되어 있으며, 클라이언트가 로컬 호스트 URL로 로그인을 한다.

  • 큐브 프리팹은 기본적인 게임 오브젝트 구성 요소를 포함하고 있으며, 메쉬 필터, 박스 콜라이더, 메쉬 렌더러 등을 가지고 있다.

  • 네트워크 오브젝트 컴포넌트는 네트워크상에서 오브젝트를 식별하기 위한 태그 역할을 수행하며, 이는 네트워크에서의 신원 확인을 돕는다.

4.4. 네트워크 오브젝트 및 동기화 과정
  • 네트워크 오브젝트는 고유 번호를 가지며, 이를 통해 데이터 통신과 RPC 통신이 이루어진다.

  • 네트워크 비헤이비어를 상속받은 컴포넌트를 통해 의사 소통과 동기화가 진행되며, 이 컴포넌트는 모노비헤이비어를 기반으로 구성된다.

  • 게임 오브젝트가 오너인 경우, 사용자의 키 입력에 따라 객체를 이동시킬 수 있다.

  • 각 오브젝트의 오너십은 네트워크 비주얼라이제이션 도구를 통해 확인할 수 있으며, 오너에 따라 제어권이 달라질 수 있다.

  • 클라이언트의 트랜스폼 이동은 다른 클라이언트와의 동기화를 통해 수행되며, 이는 게임의 원활한 네트워크 플레이를 지원한다.

4.5. 유니티 6를 통한 멀티플레이어 게임 프로토타이핑
  • 유니티 6의 세션 로비 기능을 활용하여 사용자가 게임 방을 생성하고 접속할 수 있는 테스트가 가능해졌다.

  • 멀티플레이어 센터에서 로그인 후 방 목록과 기본적인 게임 진행 상태를 확인할 수 있는 UI를 제공하여 쉽게 테스트할 수 있다.

  • 방 생성과 플레이어 정보를 확인하는 기능을 추가함으로써 게임 진행의 기본 기능이 구현되었고, 이를 테스트하여 실제 플레이어와의 연결을 확인할 수 있다.

  • 사용자는 방에 조인하기 위해 생성된 코드를 사용하거나, 기본 UI에서 쉽게 복사할 수 있는 기능을 추가하여 다른 사용자와 쉽게 공유할 수 있다.

  • 유니티 6는 멀티플레이어 게임을 프로토타입 하는 데 있어 사용자 간의 접속과 게임 플레이 공유를 용이하게 하여, 기본 UI와 소스 코드가 구현된 상태에서 게임을 쉽게 개발하도록 지원한다.

 

🚀 디스트리뷰티드 어소리티 샘플 프로젝트 소개

  • 디스트리뷰티드 어소리티 샘플 프로젝트를 테스트하고자 미리 실행해 두었으며, 개발자들은 이를 다운로드하여 사용해볼 수 있다.

  • 유니티 브이에는 바이트 사이즈 샘플과 함께 아스테로이드 샘플이 포함되어 있어, 사용자는 이를 통해 멀티플레이어 테스트를 진행할 수 있다.

  • 클라이언트 간의 시뮬레이션 권한 재분배를 통해, 더 많은 사용자가 동시에 접속해도 연산 비용을 줄일 수 있는 장점이 있다.

  • 디스트리뷰티드 환경에서 클라이언트가 권한을 가져오기 때문에, 해킹에 대한 대응책을 마련하는 것이 필수적이다.

  • 디스트리뷰티드 어소리티 토폴로지는 세션 관리 서비스와 공유 상태 정보를 통해 안정성을 높이며, 클라이언트의 연결 종료 시에도 세션을 유지할 수 있다.