This document is about: PUN 2
SWITCH TO

PUN Classic (v1), PUN 2, Bolt는 휴업 모드입니다. Unity2022에 대해서는 PUN 2에서 서포트하지만, 신기능의 추가는 없습니다. 현재 이용중인 고객님의 PUN 및 Bolt 프로젝트는 중단되지 않고, 퍼포먼스나 성능이 떨어지는 일도 없습니다. 앞으로의 새로운 프로젝트에는 Photon Fusion 또는 Quantum을 사용해 주십시오.

Webhooks FAQ

룸 재참여는 어떻게 하나요?

사용자가 퇴장 당하지 않았다면 이전에 참가 했었던 방에 다시 참여 할 때는 두 가지 방식이 있습니다.
두가지 방식 모두 각각의 조건이 맞아야 하며 게임클라이언트에서 LoadBalancingClient.OpJoinRoom() 를 호출하여 재참여를 합니다.
전달되는 actorNr 아규먼트는 0 이 아니며 이 값은 재참여를 의미하게 됩니다(actorNr != 0).

  1. 권장 방식: RoomOptions.CheckUserOnJoin = true
    첫 번째 방식은 암시적인 재참여이고 사용자에게 완전하게 투명한 것으로서 여겨 집니다.
    이 방식은 룸이 최초로 생성 되었을 때 RoomOptions.CheckUserOnJoin 플래그가 true 로 설정되었다고 가정합니다.
    룸에 재참여 하는 경우에 클라이언트 SDK 에서 OpJoinRoom() 을 0 이 아닌 ActorNr 와 같이 호출 하면 됩니다.

  2. 명시적 방식: RoomOptions.CheckUserOnJoin = false, ActorNr>0
    룸 생성시에 RoomOptions.CheckUserOnJoinfalse 로 설정 되어있고, OpJoinRoom() 을 호출 할 때 엄격하게 양수의 ActorNr (actorNr>0) 를 지정하여 재참여 하는 다른 접근 방식입니다.

예상하는 결과에 도달하기 위해서 최초 그 방에 참여 했을 때에 부여되었던 번호와 정확하게 같은 ActorNr 로 재참여 해야 합니다.
따라서 룸의 각 사용자에 대한 ActorNr 를 저장 해야 합니다.

새로운 룸을 생성하는 동안 EmptyRoomTtl 을 최대 값으로 설정하면 어떻게 되나요?

가능하지 않으며 Photon 이 EmptyRoomTtl 을 더 낮은 값으로 수정되어야 한다는 오류를 리턴 할 것입니다.
Photon 클라우드의 EmptyRoomTtl 한계점은 300,000 milliseconds( 5분) 으로 설정되어 있으며 독립적으로 호스트 한 Photon 서버에서 변경이 가능 합니다.

EmptyRoomTtl 의 최적 값은 12 초 ( 12,000 milliseconds) 입니다.

Webhooks로 룸 상태를 변경할 수 있나요?

Webhooks는 룸 상태의 내용을 변경할 수 없습니다.

룸 상태의 저장과 가져오는 것 이외에 webhook 의 흥미로운 유즈 케이스가 있나요?

글쎄요, webhooks 를 활용해서 할 수 있는 일은 너무나 많습니다 :)

일부 사항을 나열 해봤습니다 :

  • 서버측 인증 코드:
    서버 측에서만 수행되어야 할 필요가 있는 특정 게임 로직을 사용할 때 매우 유용 합니다.
  • 악의 적인 해커로 부터의 방어:
    사기꾼을 감지 할 때 Webhook 는 매우 편리할 수 있습니다.
    게임 프로퍼티들과 게임 이벤트 webhook 는 서버측 코드에서 플레이어의 액션을 인증하는데 사용 될 수 있습니다.
  • 서버측 푸시 알림 전송:
    게임이벤트 webhook 을 통해 서버측에서 비활성 플레이어에게만 전송하는 푸시알림 전송이 최적화 될 수 있습니다.
  • Photon 의 룸 상태 이외의 게임 데이터 저장:
    게임 데이터로 Photon 의 룸 프로퍼티와 이벤트 캐시에만 사용하는 것이 의무 사항은 아닙니다.
  • 분석:
    Webhooks는 강력한 무료로 사용할 수 있는 분석 서비스 입니다.
    추적할 수 있는 통계는 룸 생성, 액터 참여, 룸 이벤트등 무궁무진 합니다...

webhooks 는 룸 이벤트를 변경하던지 새로운 Photon 이벤트를 전송 할 수 있나요?

아니오. webhooks 는 수신된 이벤트들의 데이터를 변경할 수 도 없으며 다른 이벤트를 전송할 수 도 없습니다.

webhook 로 커스텀 룸 프로퍼티에 접근 할 수 있나요?

짧게 답하면 아닙니다.
하지만 State 객체는 공용 커스텀 프로퍼티(즉, 로비에서 보여지는)의 읽을 수 있는 형태를 포함하고 있는 Type=='Save' webhook 의 GameEvent, GameProperties 와 GameClose 의 아규먼트로써 사용 가능 합니다.

언제 액터가 룸을 떠났는지 판단하며 언제 비활성으로 표기되어야 하나요?

게임서버에서 연결 해제된 모든 Photon 액터는 어찌됐건 룸을 떠난 것 입니다.
문제는 동일한 액터가 룸을 고의적으로 떠난 것 - 이 의미는 액터가 명시적으로 룸을 "포기" 또는 "종료" 또는 "빠져나온"- 인지 아닌지의 문제 입니다.
고의적으로 룸을 떠났다면 액터는 룸의 액터가 아니므로 룸의 ActorList 에서 제거 됩니다.
반대로 액터가 나중에 재참여 하려고 룸을 일시적으로 빠져나왔다면 액터는 Inactive 또는 IsActive = false 또는 IsComingBack 으로 표기 됩니다.

룸에 참여했던 모든 액터와 여전히 GameServer 에 연결되어 있는 액터는 항상 Active 로 간주 됩니다.
액터들의 상태는 GameEvent webhook 내의 룸의 ActorList 에 노출되게 됩니다.

룸을 포기 하기 위해서는 OpLeave(false) 를 호출 하고 잠시 동안 나가기 위해서는 Disconnect() 또는 OpLeave(true) 를 호출 합니다.
특정한 게임 유형에서 "사직" 또는 "화나서 그만둠"과 같은 가능한 시나리오에 대해서는 사용자는 두가지 중 하나의 방법을 선택 할 수 있을 것 입니다.

추가적인 정보는 GameLeave webhook 섹션에서 확인 해주세요.

0 <= PlayerTTL <= EmptyRoomTTLIsPersistent = true 로 하는 게 의미가 있나요 ?

PlayerTTL 은 액터가 룸 안에서 비활성 상태로 존재 할 수 있는 총 시간 입니다. 플레이어가 룸에서 연결해제 되어 있을 수 있는 기간을 의미 합니다.
만약 PlayerTTL = 0 로 룸을 생성 했다면 플레이어들이 다시 되돌아 올 수 없습니다. 그리고 플레이어들이 다시 돌아오지 않는다면 플레이어들을 위해 룸 상태를 저장 할 필요가 없다는 것 입니다.
설계에 의해서 룸 상태는 최소 한명의 비활성 플레이어가 있어야 하지만 룸 상태가 저장 되어야 합니다.

추가적인 정보는 GameLeave webhook 섹션을 참고 하세요.

Back to top