- PlayFab으로 Photon 플레이어 인증.
- PlayFab CloudScript 콜백을 사용하여 룸 이벤트 수신.
Photon 빠른 시작
이 빠른 시작에서는 PlayFab과 함께 작동하도록 Photon Multiplayer를 설정하는 방법을 보여줍니다. 현재, PlayFab은 다음과 같은 Photon 통합을 제공합니다.- PlayFab으로 Photon 플레이어 인증.
- PlayFab CloudScript 콜백을 사용하여 룸 이벤트 수신.
Unity에서 완전히 지원되는 PlayFab Multiplayer 및 Chat Experience의 경우, 자세한 내용은 PlayFab Party Unity Plugin을 참조하세요.
사전 요구 사항
- PlayFab SDK를 가져오고 구성된 타이틀이 있는 Unity 프로젝트.
- 등록된 PlayFab 타이틀.
이 가이드는 Chat Application 설정을 생략합니다. Chat Application을 통합하려면, 새 Photon Chat Application을 만들고 Unity 및 PlayFab Game Manager - Photon Add-on 페이지의 해당 상자에 App ID를 입력하세요.
Photon 애플리케이션 설정
- Photon 대시보드에 등록하고 로그인한 후, Create a new App을 선택합니다.

- Photon Type을 선택합니다.
- Name을 선택합니다.
- Description을 만듭니다.
- Create를 선택하여 제출합니다.

인증 설정
- 목록에서 새로 만든 애플리케이션을 찾고 Manage를 선택합니다.

- Application 대시보드에서 페이지 Title 아래에 있는 App ID를 찾아 저장합니다.

- Authentication 섹션을 찾습니다.
- Custom Server를 선택합니다.

PlayFabTitleId 자리 표시자를 자신의 Title Id로 바꿉니다.
- URL을 입력합니다.
- Create 버튼을 선택하여 제출합니다.

Photon용 PlayFab 타이틀 설정
타이틀의 Game Manager 페이지로 이동한 다음:- Add-ons 탭으로 이동합니다.
- Add-ons 목록에서 Photon을 찾아 선택합니다.

- Photon Add-on 페이지에서 Photon Realtime Application ID를 지정하여 Photon을 설치할 수 있습니다.
- 선택적으로, Chat App ID를 지정할 수 있습니다.
- Add-on (3) 을 설치하면, Photon secret Key가 생성됩니다 (2).
- 웹 후크를 구성할 때 향후 사용을 위해 저장합니다.
Photon 비밀 키를 안전하고 쉽게 접근할 수 있는 장소에 저장하는 것을 잊지 마세요. Webhooks를 구성할 때 유용합니다.

Photon webhooks 설정
선택적 통합으로, Photon은 특정 이벤트를 PlayFab CloudScript로 전송할 수 있습니다. 이는 webhooks로 수행됩니다.- Base URL을 지정합니다.
- 그런 다음 사용 가능한 각 이벤트에 대한 경로를 지정합니다.
- 경로는 사실상 CloudScript에서 구현된 핸들러 이름입니다.
Title Id 자리 표시자를 자신의 Title Id로 바꿔야 합니다.
PhotonSecretKey 토큰을 Photon Add-on 페이지에서 생성한 비밀 키로 바꿔야 합니다.
- Base URL을 입력합니다.
- 사용 가능한 각 Events에 대한 CloudScript 핸들러 Name을 할당합니다.
- CustomHttpHeaders를 제거합니다.
- Save 버튼을 선택하여 제출합니다.

Unity 프로젝트 설정
이 가이드는 PlayFab SDK를 이미 가져오고 설정했으며, 타이틀 설정을 구성했다고 가정합니다.- Asset Store로 이동하여 시작합니다.
- Photon Unity Networking Free 패키지를 찾습니다.
- Import (1) 을 선택합니다.
- 가져온 파일을 검사할 수 있습니다.
- 그런 다음 Import (2) 를 선택합니다.

- 만든 Photon App에 대해 Photon Application Dashboard에서 찾은 Realtime Application ID (1) 를 입력합니다.
- Setup Project (2) 를 선택합니다.
- 설정이 완료되면 Close (3) 를 선택합니다.

- 상단 창 패널로 이동합니다.
- Window를 선택합니다.
- 그런 다음 Photon Unity Networking (1) 을 선택합니다.
- 마지막으로 Highlight Server Settings (2) 를 선택합니다.
- Standard Unity 프로젝트 창이 PhotonServerSettings (3) 객체를 표시합니다.
- 객체를 선택하여 Unity Inspector 창에서 설정을 확인합니다.

PhotonServerSettings의 일부로, Chat Application ID를 할당할 수 있는 옵션이 있습니다.
PlayFab에서 Photon으로의 인증 구현
PlayFab Game Manager에서 타이틀에 대해 Photon Add-on을 활성화하고 Photon Application 대시보드에서 인증을 구성하면, PlayFab을 통해 Photon 환경 내에서 기존 PlayFab 플레이어를 인증할 수 있습니다. 이는 Photon에 대한 사용자 관리 구현을 완전히 피할 수 있음을 의미합니다.- Photon Unity Networking Free 패키지의 Classic 버전에서 DemoHub-Scene-V2 씬으로 이동합니다.
- 이 씬은 패키지의 모든 예제에 대한 허브입니다.
- 이 씬이 로드되는 첫 번째 씬이므로, PlayFab을 Photon으로 인증할 수 있게 하는 작은 스크립트를 추가하겠습니다.
- PlayFabAuthenticator라는 빈 GameObject를 만듭니다.
- 그런 다음 Unity Inspector 창에서 이 GameObject에 동일한 이름의 컴포넌트를 추가합니다.

PlayFabAuthenticator 컴포넌트의 코드를 복사하여 붙여넣고, 파일을 저장한 후 닫습니다.
PlayFab에서 Photon으로의 인증 테스트
- 씬을 시작합니다.
- 콘솔 메시지의 흐름을 검사합니다. 다음을 확인하세요.
- PlayFab 자체 인증이 성공했습니다.
- Photon 토큰이 획득되었습니다.

- PlayFab 인증이 완료되었는지 확인하려면, Demo Boxes를 선택합니다.
- 그런 다음 다음 그림과 같이 Load Demo를 선택합니다.


Photon 룸 이벤트 + CloudScript
Photon 매치메이킹 시스템에는 Room이라는 개념이 있습니다. 이 개념에 익숙하지 않다면, Photon Matchmaking Guide를 참조하세요. PlayFab을 사용하면 다양한 룸 이벤트를 가로챌 수 있습니다. 다음 룸 이벤트는 CloudScript만으로 가로챌 수 있습니다.RoomCreatedRoomJoinedRoomLeftRoomClosed
RoomPropertyUpdatedRoomEventRaised
룸 이벤트에 대한 핸들러를 도입하면, 이는 이벤트 처리 흐름의 필수적인 부분이 됩니다. 따라서 CloudScript 실행 중 발생하는 오류는 전체 시스템에 문제를 일으킬 수 있습니다. 예를 들어,
RoomCreated 핸들러가 오류를 던지면, 클라이언트도 오류를 던지며 제대로 연결할 수 없게 됩니다.Room Created 핸들러
RoomCreated 핸들러는 Photon 룸이 생성될 때마다 호출됩니다. 다음 CloudScript 핸들러가 이러한 이벤트를 가로챕니다.
“args” 인수를 사용하여 이벤트에 대한 더 많은 데이터를 얻을 수 있습니다.
Room Joined 핸들러
RoomJoined 핸들러는 플레이어가 룸에 참가할 때마다 호출됩니다. 다음 CloudScript 핸들러가 이러한 이벤트를 가로챕니다.
RoomCreated를 사용하세요. “args” 인수를 사용하여 이벤트에 대한 더 많은 데이터를 얻을 수 있습니다.
Room left
RoomLeft 핸들러는 플레이어가 룸을 떠날 때마다 호출됩니다. 다음 CloudScript 핸들러가 이러한 이벤트를 가로챕니다.
Room Closed 핸들러
RoomClosed 핸들러는 마지막 플레이어가 룸을 떠나 룸에 남은 플레이어가 없을 때마다 호출됩니다. 다음 CloudScript 핸들러가 이러한 이벤트를 가로챕니다.
Room Property Updated
RoomPropertyUpdated 핸들러는 룸 속성이 변경될 때마다 호출됩니다. 다음 CloudScript 핸들러가 이러한 이벤트를 가로챕니다.
currentPlayerId는 이 핸들러에서 정의되지 않습니다. 룸 속성이 클라이언트에서 변경된 경우, “args” 인수를 사용하고 UserId를 참조하여 담당 플레이어를 얻을 수 있습니다.Room Event Raised
Room Event Raised는 사용자 지정 룸 이벤트가 발생할 때마다 호출됩니다. 다음 CloudScript 핸들러가 이러한 이벤트를 가로챕니다.Room Event 핸들러 테스트
이 예제는 이전 예제(PlayFab + Photon 인증)를 확장합니다. 타이틀에 대해 다음 CloudScript를 업로드합니다.PlayFabAuthenticator 스크립트를 확장합니다. 확장된 버전은 또한 씬 로드 사이에 객체를 파괴하지 않도록 Awake 메서드를 활용합니다.
- 허브 씬을 실행하고 PlayFab 인증이 완료될 때까지 기다립니다 (1).
- 그런 다음 Boxes Demo 씬을 로드합니다 (2).

- 씬이 로드되면, 피어가 새로 만들어진 룸에 연결될 때까지 기다립니다 (1).
- 그런 다음 왼쪽 상단 모서리의 Execute Example을 선택합니다 (2).
- 콘솔 출력을 관찰합니다 (3).
- 오류가 발생하지 않았는지 확인합니다.

- 처음에, Photon 인스턴스에는 열린 룸이 없었습니다. 예제를 시작하면 Photon이 Boxes Demo를 위한 룸을 만들었습니다.
- 참가하는 첫 번째 플레이어는 룸을 요청한 플레이어입니다. 따라서 RoomJoined 이벤트는 기록되지 않았습니다. 그런 다음 예제 코드를 실행했습니다.
- 먼저, 사용자 지정 Room Event를 발생시켰습니다.
- 그런 다음, 사용자 지정 Room Property를 설정했습니다.
- 그런 다음 Unity 플레이 모드를 중지했습니다. 이로 인해 클라이언트가 룸을 떠났습니다.
- 연결이 끊긴 클라이언트가 마지막이었기 때문에, 더 이상 클라이언트가 없고 Photon이 룸을 닫습니다.

