> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Party Unity plugin quickstart

> Unity 프로젝트에 PlayFab Party 플러그인을 추가하기 위한 빠른 시작입니다. 패키지 설치, 플레이어 인증, 엔드포인트 간 음성 채팅 활성화 방법을 설명합니다.

# 빠른 시작: PlayFab Party Unity 플러그인

이 빠른 시작은 Unity용 Party SDK를 설치하고 플레이어를 Party 네트워크에 함께 참여시키는 첫 번째 API 호출을 수행하는 데 도움이 됩니다. 계속하기 전에 PlayFab 계정에서 [Game Manager를 통해 Party 기능 활성화](/services/playfab/multiplayer/networking/enable-party)를 완료했는지 확인하세요.

<Note>
  Microsoft Game Development Kit(GDK)를 기반으로 게임을 개발하는 데 이 플러그인을 사용할 예정이라면 GDK를 별도로 획득하고 설치해야 합니다. 또한 XBOX 콘솔의 Game Core용 Unity 애드온에 대한 자세한 내용을 참조하세요.
</Note>

## 요구 사항

* [PlayFab 개발자 계정](https://developer.playfab.com).

* 설치된 Unity Editor. Unity Hub를 통해 개인용 Unity를 설치하거나 전문 용도의 Unity+를 설치하려면 [Unity 다운로드](https://unity3d.com/get-unity/download)를 참조하세요. 필요한 경우 특정 플랫폼의 문서에서 Unity 지원을 확인하세요. 지원되는 최소 Unity 버전은 Unity 2017 LTS입니다.

* Unity 프로젝트로, 다음 옵션 중 하나가 될 수 있습니다.

  * 완전히 새로운 프로젝트: 자세한 내용은 [처음 Unity 시작](/services/playfab/sdks/unity3d/quickstart)을 참조하세요.
  * 가이드 자습서 프로젝트. 자세한 내용은 [Unity 시작하기](https://learn.unity.com/)를 참조하세요.
  * 기존 프로젝트.

* PlayFab “core” Unity3D SDK. Unity3D SDK 설치에 대한 정보는 [빠른 시작: Unity의 C#용 PlayFab 클라이언트 라이브러리](/services/playfab/sdks/unity3d/quickstart#download-and-install-playfab-sdk)의 “Download and install PlayFab SDK” 섹션을 참조하세요.

## PlayFab Party Unity 플러그인 다운로드 및 설치

다음 단계에 따라 PlayFab Party Unity 플러그인을 다운로드하고 설치합니다.

1. PlayFab [Party Unity Plugin](https://github.com/playfab/PlayFabPartyUnity) Asset 패키지를 다운로드합니다(플랫폼에 따라 배포 지점을 사용).
2. **중요!** 플러그인과 함께 게시된 [README 파일](https://github.com/PlayFab/PlayFabPartyUnity/blob/master/README.md)의 정보를 참조하세요. 이는 각 특정 버전에 맞춰져 있으며 플랫폼에 특정한 중요한 지침을 포함할 수 있습니다.
3. Unity 프로젝트를 엽니다.
4. .unitypackage를 저장한 위치로 이동하여 두 번 클릭하여 가져오기 대화 상자를 엽니다.
5. PlayFab Party Unity Plugin을 프로젝트로 가져오려면 **Import**를 선택합니다.

## 씬 설정

이 부분의 가이드에서는 Unity에서 PlayFab Party API를 호출할 수 있도록 `PlayFabMultiplayerManager`를 씬에 추가하는 방법을 보여줍니다.

네트워크를 만들기 전에 **PlayFab 플레이어가 로그인되어 있어야 합니다**. 플레이어 로그인에 대한 정보는 [빠른 시작: Unity의 C#용 PlayFab 클라이언트 라이브러리의 첫 번째 API 호출 만들기](/services/playfab/sdks/unity3d/quickstart#making-your-first-api-call)를 참조하세요.

1. Unity 편집기의 Project 창에서 **Assets > PlayFabPartySDK > Prefabs**로 이동합니다.

2. Prefabs 폴더에서 **PlayFabMultiplayerManager**를 씬의 **Hierarchy** 창으로 끌어 놓습니다.

3. 씬에서 “HelloPartyLogic”이라는 빈 Game Object를 만듭니다.

4. HelloPartyLogic Game Object를 선택하여 **Inspector**를 엽니다.

5. **Add Component**를 선택합니다.

6. “HelloPartyLogic”을 입력하고 Enter를 눌러 새 스크립트 메뉴를 표시합니다.

7. Enter를 다시 눌러 새 스크립트 HelloPartyLogic.cs를 만듭니다.

8. **Project** 창에서 스크립트를 찾아 두 번 클릭하여 스크립트를 편집합니다.

9. 스크립트에 다음 using 문을 추가합니다.

   ```csharp theme={null}
   using PlayFab;
   using PlayFab.Party;
   using PlayFab.ClientModels;
   ```

10. PlayFab에 로그인하기 위해 Start 메서드에 다음 코드를 추가합니다.

    ```csharp theme={null}
    // Log into playfab
    var request = new LoginWithCustomIDRequest { CustomId = UnityEngine.Random.value.ToString(), CreateAccount = true };
    PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure);
    ```

11. 클래스에 다음 메서드를 추가합니다.

    ```csharp theme={null}
    private void OnLoginSuccess(LoginResult result)
    {
    }

    private void OnLoginFailure(PlayFabError error)
    {
    }
    ```

<Note>
  다음 오류가 발생할 수 있습니다. `Error CS0227 Unsafe code may only appear if compiling with /unsafe The plugin requires unsafe code because it interops with a native DLL. Mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "XGamingRuntime", "AMD64".`
</Note>

Microsoft GDK 및 Windows는 x64만 지원합니다.

이러한 문제를 해결하려면:

1. Unity Editor에서 **File > Build Settings**를 선택합니다.
2. 플랫폼을 선택합니다. 그런 다음 **Architecture** 드롭다운에서 x86\_64 또는 x64를 선택합니다.
3. **Player Settings**를 선택합니다.
4. 오른쪽 창에서 Other Setting을 선택합니다.
5. **Allow unsafe Code** 설정을 찾아 선택합니다.
6. **Build Settings** 및 **Project Settings** 창을 닫습니다.

## 네트워크에 연결

이 부분의 가이드에서는 네트워크를 만들고 참가하는 방법을 보여줍니다.

1. HelloPartyLogic.cs 스크립트를 엽니다. `OnLoginSuccess` 메서드에서 다음 코드를 추가하여 네트워크를 만들고 참가합니다.

   ```csharp theme={null}
   PlayFabMultiplayerManager.Get().CreateAndJoinNetwork();
   PlayFabMultiplayerManager.Get().OnNetworkJoined += OnNetworkJoined;
   ```

2. OnNetworkJoined 이벤트 핸들러를 정의하려면 클래스에 다음 코드를 추가합니다.

   ```csharp theme={null}
   private void OnNetworkJoined(object sender, string networkId)
   {
       // Print the Network ID so you can give it to the other client.
       Debug.Log(networkId);
   }
   ```

3. 저장하고 Unity Editor에서 Play를 선택합니다. Network ID가 Console 창에 표시됩니다.

## 기존 네트워크에 참가

이 부분의 가이드에서는 다른 클라이언트가 만든 기존 네트워크에 참가하는 방법을 보여줍니다.

1. HelloPartyLogic.cs 스크립트를 엽니다. OnLoginSuccess 메서드에서 다음 코드를 추가하여 네트워크에 참가합니다.

   ```csharp theme={null}
   string networkId = "<your network id>";
   PlayFabMultiplayerManager.Get().JoinNetwork(networkId);
   ```

2. 로컬 클라이언트가 네트워크에 참가할 때 실행되는 이벤트를 정의하려면 `OnLoginSuccess` 메서드에 다음 코드를 추가합니다.

   ```csharp theme={null}
   PlayFabMultiplayerManager.Get().OnNetworkJoined += OnNetworkJoined;
   ```

3. OnNetworkJoined 이벤트 핸들러를 정의하려면 클래스에 다음 코드를 추가합니다.

   ```csharp theme={null}
       private void OnNetworkJoined(object sender, string networkId)
       {
           // Print the Network ID so you can give it to the other client.
           Debug.Log("Network joined!");
       }
   ```

   호스트에서 참가하려는 다른 플레이어로 Network ID를 가져오는 방법에는 여러 가지가 있습니다. 그렇게 하는 방법의 예는 이 Unity 플러그인의 샘플을 참조하세요.

4. 저장하고 Unity Editor에서 Play를 선택합니다. 문자열 “Network joined!”가 Console 창에 표시됩니다.

## 다른 플레이어에 액세스

이 부분의 가이드에서는 로컬 플레이어를 포함하여 네트워크의 다른 플레이어에 액세스하는 방법을 보여줍니다.

네트워크에 새 플레이어가 참가하고 나가는 것을 수신 대기하려면 OnRemotePlayerJoined 및 OnRemotePlayerLeft 이벤트에 등록합니다.

1. HelloPartyLogic.cs 스크립트를 엽니다. OnLoginSuccess 메서드에서 다음 코드를 추가하여 네트워크를 만들고 참가합니다.

   ```csharp theme={null}
   PlayFabMultiplayerManager.Get().OnRemotePlayerJoined += OnRemotePlayerJoined;
   PlayFabMultiplayerManager.Get().OnRemotePlayerLeft += OnRemotePlayerLeft;
   ```

2. 클래스에 다음 메서드를 추가합니다.

   ```csharp theme={null}
   private void OnRemotePlayerLeft(object sender, PlayFabPlayer player)
   {
   }

   private void OnRemotePlayerJoined(object sender, PlayFabPlayer player)
   {
   }
   ```

3. 로컬 플레이어에 액세스하려면 OnRemotePlayerJoined 메서드에 다음 코드를 추가합니다.

   ```csharp theme={null}
   var localPlayer = PlayFabMultiplayerManager.Get().LocalPlayer;
   ```

PlayFabPlayer 클래스에는 플레이어를 식별하고, 음소거하고, 채팅 UI에서 채팅 상태를 렌더링하는 속성이 포함되어 있습니다.

## 데이터 메시지 보내기 및 받기

이 부분의 가이드에서는 데이터 메시지를 보내고 받는 방법을 보여줍니다. 데이터 메시지를 보내고 받기 전에 네트워크에 참가해야 합니다.

1. HelloPartyLogic.cs 스크립트를 엽니다. OnLoginSuccess 메서드에서 다음 코드를 추가하여 데이터 메시지를 수신 대기합니다.

   ```csharp theme={null}
   PlayFabMultiplayerManager.Get().OnDataMessageReceived += LocalPlayer_OnDataMessageReceived;
   ```

2. 클래스에 `OnDataMessageRecieved` 이벤트 핸들러를 추가합니다.

   ```csharp theme={null}
   private void OnDataMessageReceived(object sender, PlayFabPlayer from, byte[] buffer)
   {
       Debug.Log(Encoding.Default.GetString(buffer));
   }
   ```

3. 데이터 메시지를 보내려면 Update 메서드에 다음 코드를 추가합니다.

   ```csharp theme={null}
   if (Input.GetButtonDown("Fire1"))
   {
       byte[] requestAsBytes = Encoding.UTF8.GetBytes("Hello (data message)");
       PlayFabMultiplayerManager.Get().SendDataMessageToAllPlayers(requestAsBytes);
   }
   ```

HelloPartyLogic.cs를 저장하고 Unity Editor에서 Play를 선택합니다.

1. 두 번째 클라이언트에서 [네트워크에 연결](#connecting-to-a-network)의 단계를 반복하여 네트워크를 만들고 참가합니다.
2. 첫 번째 클라이언트에 반환된 Network ID를 복사하여 네트워크에 연결합니다.
3. 씬에서 메시지를 보내려면 선택합니다. “Hello (data message)”가 Console 창에 표시됩니다.

## 채팅 메시지 보내기 및 받기

이 부분의 가이드에서는 채팅 메시지를 보내고 받고 원격 플레이어를 음소거하는 방법을 보여줍니다. 텍스트 채팅 외에도 Party는 플레이어 간 음성 채팅을 자동으로 활성화합니다.

채팅 메시지를 보내고 받기 전에 네트워크에 참가해야 합니다.

1. HelloPartyLogic.cs 스크립트를 엽니다. OnLoginSuccess 메서드에서 다음 코드를 추가하여 채팅 메시지를 수신 대기합니다.

   ```csharp theme={null}
   PlayFabMultiplayerManager.Get().OnChatMessageReceived += OnChatMessageReceived;
   ```

2. 클래스에 이벤트 핸들러 `OnChatMessageReceived`를 추가합니다.

   ```csharp theme={null}
   private void OnChatMessageReceived(object sender, PlayFabPlayer from, string message, ChatMessageType type)
   {
       Debug.Log(message);
   }
   ```

HelloPartyLogic.cs를 저장하고 Unity Editor에서 Play를 누릅니다.

1. 두 번째 클라이언트에서 [네트워크에 연결](#connecting-to-a-network)의 단계를 반복하여 네트워크를 만들고 참가합니다.
2. 첫 번째 클라이언트에 반환된 Network ID를 복사하여 네트워크에 연결합니다.
3. 씬에서 선택하면 메시지가 전송되어 Console 창에 표시됩니다.
4. 플레이어에게 다른 플레이어를 음소거하는 옵션을 제공하려면 IsMuted 속성을 true로 설정합니다.

   ```csharp theme={null}
   private void OnRemotePlayerJoined(object sender, PlayFabPlayer player)
   {
       // This player will not be able to send text or voice communication.
       // Data messages can still be sent.+
       player.IsMuted = true;
   }
   ```

## 사용자 지정 피어 연결 구성 옵션으로 네트워크에 연결

이 부분의 가이드에서는 사용자 지정 피어 연결 구성 옵션으로 네트워크를 만들고 참가하는 방법을 보여줍니다. 기본 옵션은 P2P이지만 여기 표시된 플래그의 조합을 사용하면 사용자가 이 옵션을 수정할 수 있습니다: [DirectPeerConnectivityOptions](/services/playfab/multiplayer/networking/unity-party-api-reference/enums/partyunitydirectpeerconnectivityoptions). 이 예에서는 P2P가 어떻게 설정되는지 보여줍니다.

1. HelloPartyLogic.cs 스크립트를 엽니다. `OnLoginSuccess` 메서드에서 다음 코드를 추가하여 네트워크를 만들고 참가합니다.

   ```csharp theme={null}
   PlayfabNetworkConfiguration networkConfiguration = new PlayfabNetworkConfiguration();
   networkConfiguration.DirectPeerConnectivityOptions = PARTY_DIRECT_PEER_CONNECTIVITY_OPTIONS_ANY_PLATFORM_TYPE |
                                                        PARTY_DIRECT_PEER_CONNECTIVITY_OPTIONS_ANY_ENTITY_LOGIN_PROVIDER;
   PlayFabMultiplayerManager.Get().CreateAndJoinNetwork(networkConfiguration);
   PlayFabMultiplayerManager.Get().OnNetworkJoined += OnNetworkJoined;
   ```

## 타이틀 일시 중단 처리

일부 플랫폼은 타이틀 실행의 임시 일시 중단을 지원합니다: iOS, Switch 및 GDK.
타이틀이 일시 중단되면 네트워크 스택이 무효화되고 PlayFab Party는 PlayFab Party 네트워크에 대한 연결을 유지할 수 없습니다.
PlayFab Party를 사용할 때 타이틀 실행의 일시 중단 및 재개를 처리하기 위해 특별한 고려가 필요합니다.

### iOS

iOS에서는 [ResetParty()](/services/playfab/multiplayer/networking/unity-party-api-reference/classes/playfabmultiplayermanager/methods/playfabunityresetparty)를 호출하여 PlayFab Party 네트워크를 나가고 다시 연결해야 합니다.

### Switch 및 GDK

Nintendo Switch 및 Microsoft GDK에서는 타이틀 실행이 재개될 때까지 기다린 후 PlayFab Party를 다시 초기화하고 네트워크에 다시 연결하기 위해 PlayFab Party와 PlayFabMultiplayerManager와 관련된 모든 리소스를 정리해야 합니다.

“타이틀 일시 중단 중에 PlayFab Party를 정리하려면 [Suspend()](/services/playfab/multiplayer/networking/unity-party-api-reference/classes/playfabmultiplayermanager/methods/playfabunitysuspend)를 호출합니다. 타이틀이 실행을 재개하면 [Resume()](/services/playfab/multiplayer/networking/unity-party-api-reference/classes/playfabmultiplayermanager/methods/playfabunityresume)을 호출하여 PlayFab Party를 다시 초기화합니다.

PlayFab Party와 PlayFabMultiplayerManager와 관련된 모든 리소스가 성공적으로 초기화되면 [기존 네트워크에 참가](#joining-an-existing-network)의 단계를 반복합니다.


## Related topics

- [Party Unity plugin overview](/ko/services/playfab/multiplayer/networking/party-unity-overview.md)
- [PlayFab Party Unity plugin Release Notes](/ko/services/playfab/multiplayer/networking/party-unity-release-notes.md)
- [PlayFab Online Subsystem (OSS) Quickstart](/ko/services/playfab/multiplayer/networking/party-unreal-engine-oss-quickstart.md)
- [Matchmaking quickstart](/ko/services/playfab/multiplayer/matchmaking/quickstart.md)
- [Matchmaking SDK quickstart](/ko/services/playfab/multiplayer/matchmaking/quickstart-client-sdk.md)
