PUN Classic(PUN1이라고도 불립니다)은 PUN의 첫 버전입니다.         현재는 리팩토링 및 기능 확장에 의해 PUN2로 새롭게 바뀌었습니다.          새 프로젝트에는 PUN2를 이용해 주시고, 기존의 프로젝트도 가능하면 PUN1에서 PUN2로 옮기는 것을 권장합니다.  자세한 내용은: "마이그레이션 노트". PUN Classic은 곧 점검이 시작됩니다.        중요한 버그의 수정과 Unity의 신버전의 지원 등을 예정하고 있습니다. 신기능의 추가는 PUN2에서만 이루어지므로 주의해 주십시오.

마스터 클라이언트와 호스트 마이그레이션

"호스트 마이그레이션"은 온라인 멀티플레이어 게임의 개념입니다. 호스트 마이그레이션을 통해 "호스트" 피어의 자연스럽고 끊김 없는 전이 방법을 다루게 됩니다. "호스트"는 게임상에서 제어권을 더 많이 가지고 있는 피어이며 게임에서 가장 중요한 것 입니다. 일반적으로 "호스트" 는 게임을 시작("호스트")하는 클라이언트이며 다른 플레이어들은 플레이하기 위해 호스트에 연결하거나 참여하여 플레이 합니다. Photon의 세계에서는 se 별 "호스트"를 실제로는 가지고 있지 않습니다. 대신에 룸별로 "특별한"클라이언트가 있는데, 이를 "마스터 클라이언트"라고 부릅니다. 기본적으로 이것은 다른 것들과 마찬가지로 일반적인 클라이언트 입니다. 마스터 클라이언트는 다른 클라이언트들보다 더 많은 일을 하라고 결정할 때 까지는 일반 클라이언트로 남아있습니다.

Photon 이 대신 해 주는 것

Photon에는 "호스트 마이그레이션" 을 위한 일반적인 해결책은 없습니다. 하지만, 이를 쉽게 해결 할 수 있는 것이 있습니다.

Photon Server는 마스터 클라이언트가 연결해제되는 것을 감지하고 룸에 있는 다른 액터로 새로운 마스터 클라이언트 역할을 부여 해 줍니다. 기본적으로 가장 낮은 수의 액터 번호를 가지고 있는 액터가 선택됩니다.

마스터 클라이언트가 변경 될때 마다, 다음의 콜백이 호출됩니다:

void OnMasterClientSwitched(PhotonPlayer newMasterClient)

Photon은 또한 클라이언트, 서버 및 플러그인 SDK에서 마스터 클라이언트를 명시적으로 변경하는 방법을 제공합니다. 다음을 사용하여 수행할 수 있습니다:

PhotonNetwork.SetMasterClient(photonPlayer);

메소드는 오퍼레이션의 전송여부를 리턴할 것 입니다.

Back To Top

해야할 것

Photon은 이전의 마스터 클라이언트가 가지고 있는 방 상태에 대한 모든 정보를 새롭게 선정된 마스터 클라이언트로 정보를 넘겨주지 않습니다. 이것은 명백한 것이 아니며, 때로 마스터 클라이언트가 이미 사라졌기(연결해제, 미응답 등) 때문에 너무 늦을 때도 있습니다. Photon은 플레이어 속성이나 캐시된 이벤트를 한 마스터 클라이언트에서 다른 마스터 클라이언트로 이동시키지 않습니다. 또한 Photon은 이전 마스터 클라이언트에 대한 이벤트를 새로 선정된 마스터 클라이언트로 다시 보내지 않습니다. 이런 사유때문에 스위치 발생시에 룸 상태가 손실되지 않도록 하는 것은 개발자의 몫 입니다.

Back To Top

권고사항

  • 마스터 클라이언트 개념은 모든 종류의 게임에 적합한 것은 아닙니다. 예를들어 빠르게 진행되는 게임은 대신에 사용자정의 서버측 코드를 사용해야야 합니다.(자체-호스트한 서버 어플리케이션 또는 플러그인).
  • 게임에 참여하는 플레이어들이 많을 수록 추가적인 작업을 위해 단일 클라이언트에 의존하는 것을 줄여야 합니다.
  • 마스터 클라이언트에게만 보내는 이벤트를 피해야 합니다. 데이터를 복제하는 것이 잃어버리는 것 보다 좋습니다. 모든 액터들에게 전송하는 것이 발생할 수 있는 마스터 클라이언트 전환을 더 쉽게 처리 할 수 있습니다. 모든 액터들인 룸 상태를 간직하고 있기 때문에, 새롭게 지정된 마스터 클라이언트는 이미 전체 룸 상태를 가지고 있을 것 입니다.
  • 마스터 클라이언트 전환이 발생하는 경우, 게임 데이터를 간직하고 싶은 경우에 사용자정의 룸 속성들이 신뢰할 수 있는 최적의 옵션입니다.
  • 마스터 클라이언트가 룸에 지속적으로 이벤트를 전송하는 경우, 마스터 클라이언트에게서 받은 최종 이벤트 시간을 저장하여 마스터 클라이언트 타임아웃 감지를 구현할 수 있으며 이 값을 게임 루프에서 지속적으로 체크할 수 있습니다. 마스터 클라이언트가 예상했던 이벤트들을 전송하지 않는 것을 감지했을 때, 명시적으로 마스터 클라이언트를 변경할 수 있습니다. 까다로운 부분은 타임아웃 값을 결정하는 것입니다. 너무 값이 적으면 오탐이 발생하고 마스터 클라이언트 스위치가 너무 자주 발생할 수 있습니다. 또한 이 검토가 한 액터(다음 마스터 클라이언트) 또는 모든 액터에게서 수행되어야 하는지에 대한 선택이 필요합니다.

  • 모바일 플랫폼에서는, 어플리케이션이 포커스를 잃을 수 있습니다. 백그라운드에서, PUN은 인지만을 위한 전용 스레드를 사용합니다. 이 스레드는 1분 동안 클라이언트를 계속 살아 있게 하기만 하며 이외 다른 기능은 없습니다. 개발자는 백그라운드 마스터 클라이언트 시나리오를 어떻게 다룰지를 결정해주어야 합니다:

    1. 어플리케이션이 백그라운드로 들어가자마자 Photon에서 연결해제.
    2. 명시적으로 마스터 클라이언트를 교체.
    3. 백그라운드 스레드 사용불가.

기술문서 TOP으로 돌아가기