# Unity 멀티플레이어 개요

> Learn about the Unity packages and services available for building multiplayer games.

Unity는 멀티플레이어 프로젝트를 제작하는 데 도움이 되는 다양한 멀티플레이어 패키지와 서비스를 제공합니다. 멀티플레이어 게임을 처음 시작하는 경우에는 [Multiplayer Center 패키지](#multiplayer-center)를 추천합니다.

## 시작

### 멀티플레이어 센터

[멀티플레이어 센터](/engine/6000.0/manual/multiplayer/center.md)는 멀티플레이어 게임을 만드는 시작점을 제공합니다. 게임 요구 사항에 따라 Unity 멀티플레이어 패키지 및 서비스를 추천하며, 샘플과 튜토리얼을 활용하는 데 도움이 됩니다.

Multiplayer Center 패키지는 기본적으로 에디터에 설치되어 있습니다. 에디터에서 새 멀티플레이어 프로젝트를 만들면 자동으로 열리며, **Window** > **Multiplayer** > **Multiplayer Center**를 사용하여 직접 열 수도 있습니다.

### 멀티플레이어 서비스 및 위젯

[Multiplayer Services 패키지](https://docs.unity.com/ugs/en-us/manual/mps-sdk/manual.md)에서는 게임에 [UGS(Unity Gaming Services)](#unity-gaming-services)를 활용하는 멀티플레이어 요소를 추가하는 SDK를 제공하여, 세션을 통해 플레이어 그룹이 게임에서 상호 작용하는 방식을 정의합니다. [Multiplayer Widgets 패키지](https://docs.unity3d.com/Packages/com.unity.multiplayer.widgets@latest?subfolder=/manual/index.html)를 사용하여 워크플로의 요소를 쉽게 테스트한 후 더 발전시킬 수 있습니다.

Multiplayer Services 패키지는 기본적으로 [Netcode for GameObjects](#netcode-for-gameobjects) 및 [Netcode for Entities](#netcode-for-entities)와 호환되며, 고급 사용 사례를 위한 [커스텀 네트워킹 솔루션](https://docs.unity.com/ugs/en-us/manual/mps-sdk/manual/create-session.md#Advanced_usage:_Specifying_a_custom_network_handler)도 지원합니다.

## Netcode for GameObjects

[Netcode for GameObjects](https://docs-multiplayer.unity3d.com/netcode/current/about/)는 네트워킹 로직을 추상화하는 고수준 네트워킹 라이브러리로, 네트워킹 세션을 통해 여러 플레이어에게 게임 오브젝트와 월드 데이터를 한 번에 전송할 수 있습니다. 대부분의 멀티플레이어 프로젝트에 적합하지만 대형 또는 고도로 최적화된 게임을 만들고 싶다면 [Netcode for Entities](#netcode-for-entities)가 더 나은 선택일 수 있습니다. Netcode for GameObjects는 클라이언트 서버 및 분산 권한 네트워크 토폴로지를 모두 지원합니다.

Netcode for GameObjects는 [멀티플레이어 툴](#multiplayer-tools), [멀티플레이어 플레이 모드](#multiplayer-play-mode), [Dedicated Server 패키지](#dedicated-server) 및 [Unity Gaming Services](#unity-gaming-services)와 호환됩니다.

## Netcode for Entities

Unity DOTS(데이터 지향 기술 스택)의 일부인 [Netcode for Entities](https://docs.unity3d.com/Packages/com.unity.netcode@latest?subfolder=/manual/index.html)는 멀티플레이어 게임 제작에 사용 가능한 클라이언트 예측 프레임워크가 포함된 서버 권한이 있는 네트워킹 솔루션을 제공합니다. 모든 멀티플레이어 프로젝트에 사용할 수 있지만 대규모 최적화가 필요한 대규모 게임과 멀티플레이어 게임 제작 경험이 있는 고급 개발자에게 주로 권장됩니다. Netcode for Entities는 클라이언트-서버 네트워크 토폴로지만 지원합니다.

Netcode for Entities는 [멀티플레이어 툴](#multiplayer-tools), [멀티플레이어 플레이 모드](#multiplayer-play-mode), [Dedicated Server 패키지](#dedicated-server) 및 [Unity Gaming Services](#unity-gaming-services)와 호환됩니다.

## 멀티플레이어 게임 테스트

### Multiplayer Tools

[Multiplayer Tools 패키지](https://docs-multiplayer.unity3d.com/tools/current/about/)에서는 프로파일러 및 네트워크 시뮬레이터를 비롯하여 멀티플레이어 게임을 분석, 디버깅 및 테스트할 수 있는 다양한 툴을 제공합니다. Unity 패키지 관리자를 사용하여 [패키지를 설치](https://docs-multiplayer.unity3d.com/tools/current/install-tools/)하고 **Window** > **Multiplayer Tools**를 사용하여 에디터에서 액세스할 수 있습니다.

Multiplayer Tools는 [Netcode for GameObjects](#netcode-for-gameobjects) 및 [Netcode for Entities](#netcode-for-entities) 모두와 호환됩니다.

### 멀티플레이어 플레이 모드

Unity 에디터에서 멀티플레이어 기능을 테스트하려면 [멀티플레이어 플레이 모드](https://docs-multiplayer.unity3d.com/mppm/current/about/)를 사용합니다. 디스크의 동일한 소스 에셋을 사용하면서 동일한 개발 기기에서 최대 4개의 플레이어(메인 에디터 플레이어와 3개의 가상 플레이어)를 동시에 시뮬레이션할 수 있습니다. Unity 패키지 관리자를 사용하여 [패키지를 설치](https://docs-multiplayer.unity3d.com/mppm/current/install/)하고 **Window** > **Multiplayer Play Mode**를 사용하여 에디터에서 액세스할 수 있습니다.

멀티플레이어 플레이 모드는 [Netcode for GameObjects](#netcode-for-gameobjects), [Netcode for Entities](#netcode-for-entities), [Dedicated Server 패키지](#dedicated-server), [Unity Gaming Services](#unity-gaming-services)와 호환됩니다.

## 유틸리티

### Unity 전송

멀티플레이어 게임 개발을 위한 로우레벨 네트워킹 라이브러리인 [Unity Transport 패키지](https://docs-multiplayer.unity3d.com/transport/current/about/)입니다. [Netcode for GameObjects](#netcode-for-gameobjects) 및 [Netcode for Entities](#netcode-for-entities) 모두에 대한 기본 프로토콜이지만, 커스텀 솔루션과 함께 사용할 수도 있습니다. Unity Transport는 UDP(User Datagram Protocol) 및 WebSocket을 통해 제공되는 연결 기반 추상화 레이어(빌트인 네트워크 드라이버)를 사용하여 Unity 엔진이 지원하는 모든 플랫폼을 지원합니다.

Unity 패키지 관리자를 사용하여 [패키지를 설치](https://docs-multiplayer.unity3d.com/transport/current/install/)할 수 있습니다.

### 전용 서버

[Dedicated Server 패키지](https://docs.unity3d.com/Packages/com.unity.dedicated-server@1.0/manual/index.html)를 사용하면 다른 프로젝트를 생성할 필요 없이 서버 및 클라이언트 역할 간에 프로젝트를 전환할 수 있으므로, [전용 서버 빌드 타겟](/engine/6000.0/manual/platform-specific/dedicated-server/introduction.md)을 대상으로 하는 경우 멀티플레이어 개발 워크플로를 개선할 수 있습니다. 패키지 관리자를 사용하여 패키지를 설치할 수 있습니다.

Dedicated Server 패키지는 [Netcode for GameObjects](#netcode-for-gameobjects), [Netcode for Entities](#netcode-for-entities) 및 [멀티플레이어 플레이 모드](#multiplayer-play-mode)와 호환됩니다.

## Unity Gaming Services

[Multiplayer Services 패키지](#multiplayer-services-and-widgets)에서는 게임에 [UGS(Unity Gaming Services)](#unity-gaming-services)를 활용하는 멀티플레이어 요소를 추가하는 SDK를 제공하여, 세션을 통해 플레이어 그룹이 게임에서 상호 작용하는 방식을 정의합니다.

### Multiplay Hosting

[Multiplay Hosting](https://docs.unity.com/ugs/en-us/manual/game-server-hosting/manual/welcome.md)은 Unity의 확장 가능한 서버 호스팅 플랫폼입니다. 게임을 호스팅하고 스케일링하는 셀프 서비스 경험으로 인프라를 대규모로 실행하고 운영하는 복잡도를 제거할 수 있으므로, 멀티플레이어 프로젝트 개발에 집중할 수 있습니다.

### 로비

Unity의 [Lobby 서비스](https://docs.unity.com/ugs/en-us/manual/lobby/manual/unity-lobby-service.md)는 멀티플레이어 게임에서 플레이어가 서로를 발견하고 연결할 수 있는 방법을 제공합니다.

### 매치메이커(Matchmaker)

Unity [Matchmaker](https://docs.unity.com/ugs/en-us/manual/matchmaker/manual/matchmaker-overview.md)는 게임 인스턴스에 원격 플레이어를 자동으로 할당하며 매치메이킹 로직을 커스터마이즈하는 데 도움이 됩니다.

### Relay

Unity [Relay](https://docs.unity.com/ugs/en-us/manual/relay/manual/introduction.md)를 사용하면 플레이어가 참여 코드를 사용하여 게임 인스턴스에 연결할 수 있습니다. Relay 서비스는 전용 게임 서버 대신 프록시 역할을 하는 유니버설 Relay 서버를 통해 연결을 제공합니다.
