본문 바로가기
Unity/TIL

Unity photon 멀티플레이 예외처리

by 김차루 2024. 6. 24.
스파르타 내배캠 42일차 TIL
C3조_ 이석삼조

 

 

 

방을 찾고 만들고 게임에 참여하고 시작하는 과정이 참... 어려웠다. photon에서 제공하는 함수들은 너무 친절했고 공식 문서도 잘 나와있지만 경험이 없었고 돌아가는 과정을 몰랐기 때문에 꽤 힘든 작업이었다. 또한 함수를 가져다 쓰는 것으로 끝나는 것이 아니라 플레이어가 멀티를 이용하는 모든 과정에 문제가 없게 하기 위해 예외가 생기는 부분을 전부 찾아서 처리해야 했다. 그 부분에 대해서는 공식문서나 한국어로 된 구글 문서가 많이 없기 때문에 모아서 정리 해보려고 한다. 

 

1. 중복 서버 연결로 인한 문제

에러명 : photonview ID duplicate found : 999. New: View 999 on RoomManager(scene) old: View 999 on RoomManager(scene).

에러명 : invalidOperationException: Duplicate key 999

서버가 연결된 상태에서 다시 서버를 연결하니 중복되는 문제가 생겼다. 원인은 로비로 넘어가는 순간 서버 연결이 되는데 로비에서 스타트로 넘어갈 때 서버를 끊어주지 않아서 중복이 됐다. 

 

그래서 스타트씬으로 나가는 메소드에서 서버를 끊고 로비씬에서 만들어지는 오브젝트를 삭제해주었다. 

 

2. 시작한 게임방에 참여 가능

조건 : 원하는 사람으로만 게임을 시작하고 싶은 게임이기 때문에 게임이 시작되면 다른 플레이어가 들어오면 안된다.

수정 전에는 방이 꽉 찼을 땐 다른 플레이어가 들어오지 못하지만 플레이어 수가 적은 상태에서 시작한 게임에는 플레이어가 참여할 수 있었다. 그래서 게임 시작 메소드에 게임이 시작되는 것과 동시에 공개 채널에 방이 보이지 않게 했다. 

startGame method

 

3. 필요한 인원이 꽉 찼을 때 게임 시작

조건 : 원하는 사람 수가 채워졌을 때 게임을 시작할 수 있다.

그렇게 하기 위해서 현재 방의 정보가 필요하다. photonnetwork 함수에 현재 방을 불러올 수 있는 함수 currentRoom 함수를 이용했다. 이 함수 안에는 방에 대한 정보가 있는데 playercount가 있기 때문에 당연히 현재 방에 들어온 플레이어 수를 확인하는데 사용할 수 있을 것이라고 생각했다. 하지만 아무리 디버그를 찍어봐도 playercount는 0이 찍혔다. 그래서 현재 방의 플레이어 정보를 확인할 수 있는 player를 사용하고 .count를 통해 player함수의 갯수로 플레이어 수를 확인했다. 

 

'Unity > TIL' 카테고리의 다른 글

[면접대비] 객체와 한정자  (0) 2024.07.01
피드백에 대한 수정 및 공부  (0) 2024.06.26
Unity Photon.Pun2 멀티 동기화  (0) 2024.06.21
Unity Photon.Pun2 멀티 플레이  (1) 2024.06.20
Unity Render Pipeline  (1) 2024.06.18