본문 바로가기
작성중

[Unity] Photon V1 이슈 정리

by Vader87 2020. 9. 17.
반응형

방 입장 타이밍 이슈

방 입장 후 게임 씬을 로딩하는 경우

동일한 환경이 아니기 때문에 방에서 보내는 메세지들을 받으며 에러가 발생합니다.

이런 경우 방 입장전 PhotonNetwork 의 isMessageQueueRunning 값을 false 로 설정해 두었다가, 씬 로딩 후 true 로 변경하면 정상 적으로 처리가 가능합니다.

isMessageQueueRunning 은 준비가 되기 전까지 메세지를 받거나 보내는 것을 막습니다.

doc-api.photonengine.com/en/pun/v1/class_photon_network.html#af498064a6019a6c69e875bd64db40216

 

Photon Unity Networking: PhotonNetwork Class Reference

The main class to use the PhotonNetwork plugin. This class is static. More... delegate void EventCallback (byte eventCode, object content, int senderId)  Defines the delegate usable in OnEventCall. More...   static void SwitchToProtocol (ConnectionProt

doc-api.photonengine.com

 

마스터 클라이언트 변경 이슈

Photon 에서는 서버를 호스트로 사용하는 대신 마스터 클라이언트를 두고 이를 호스트로 사용한다.

따라서 마스터 클라이언트에 문제가 발생하는 경우 서버에 문제가 발생하는 것처럼 정상적인 작동을 하지 않는다.

마스터 클라이언트 변경이 일어나야 되는 상황은 다음과 같다

  • 클라이언트가 백그라운드로 전환
  • 클라이언트 종료
  • 네트워크 연결 끊김

위 상황이 되었을때 다른 클라이언트는 Master Client 가 관리하던 모든 PhotonView 가 멈추는 현상이 발생한다.

현재 개발중인 환경에서는 위 상황이 지속되면, 약 1분 후 Master Client 를 연결 끊김으로 간주해 마스터 클라이언트를 변경한다.

마스터 변경 여부는 다음 콜백으로 확인이 가능하다.

void OnMasterClientSwitched(PhotonPlayer newMasterClient)

doc.photonengine.com/en-us/pun/v1/gameplay/hostmigration

 

Master Client and Host Migration | Photon Engine

MULTIPLAYER REALTIME PUN BOLT QUANTUM COMMUNICATION CHAT VOICE SELF-HOSTED SERVER We Make Multiplayer Simple Photon Realtime Develop and launch multiplayer games globally whether you are an indie developer or AAA studio. Create synchronous or asynchronous

doc.photonengine.com

Photon 공식 문서에는 다음과 같은 방법들을 추천하고 있다.

  1. 응용 프로그램이 백그라운드로 전환되는 즉시 Photon에서 연결을 끊습니다.
  2. 응용 프로그램이 백그라운드로 전환되는 즉시 방을 나갑니다.
  3. 마스터 클라이언트를 명시 적으로 설정하십시오.
  4. 연결 유지 ACK 전용 백그라운드 스레드를 비활성화합니다.

 

다음과 같은 이유로 1, 2 번 방법은 제외되었다.

잠깐 백그라운드로 전환 되는 것 때문에 진행중이던 게임이 영향을 받는 것은 원하지 않는다.

 

OnApplicationPause 에서 PhotonNetwork.SetMasterClient 호출

Resume 후 Master Client 가 변경 된다.

Photon 은 RPC 등 메세지를 바로 전송하지 않고 있다.

Photon V1 에서 Master Client 에서 Pause 상황을 확인해 전송하는 것은 안된다?

(V2 에선 즉시 메세지를 전송할 수 있는 방법이 제시되어 있다.)

 

공식 문서에는 없지만 Photon 포럼에 다음과 같은 글이 있다.

forum.photonengine.com/discussion/14693/setmasterclient-not-working-on-onapplicationpause

 

SetMasterClient not working on OnApplicationPause

When I click on phone home button all debug come but SetMasterClient not work.

forum.photonengine.com

 

PhotonNetwork.SendOutgoingCommands

doc-api.photonengine.com/en/pun/v1/class_photon_network.html#a3b8d0c1cefdf577e1dff8aecb147b7fd

 

Photon Unity Networking: PhotonNetwork Class Reference

The main class to use the PhotonNetwork plugin. This class is static. More... delegate void EventCallback (byte eventCode, object content, int senderId)  Defines the delegate usable in OnEventCall. More...   static void SwitchToProtocol (ConnectionProt

doc-api.photonengine.com

 

위 기능을 사용하면 즉시 메세지 전송이 가능해 Master Client 변경이 가능하다.

 

위치 동기화 이슈

가장 일반적인 문제는 위치 동기화 이슈이다.

각 클라이언트에서 별도로 움직이는 캐릭터 간의 위치를 동기화 시켜주는 방식은 꽤나 골치 아프다.

 

 

doc.photonengine.com/en-us/pun/v2/gameplay/hackingprotection

 

Hacking & Cheating Protection | Photon Engine

MULTIPLAYER REALTIME PUN BOLT QUANTUM COMMUNICATION CHAT VOICE SELF-HOSTED SERVER We Make Multiplayer Simple Photon Realtime Develop and launch multiplayer games globally whether you are an indie developer or AAA studio. Create synchronous or asynchronous

doc.photonengine.com

 

반응형

'작성중' 카테고리의 다른 글

[Unity] Firebase Auth  (0) 2020.09.16
[Architecture] Use case  (0) 2020.09.11
[Architecture] The Clean Architecture  (0) 2020.09.11
[Git] Commit Message Template  (0) 2020.09.04
[iOS] iOS 디버깅 하는 방법  (0) 2020.09.04

댓글