네트워크 공부

네트워크 동기화 [Photon, PUN]

ogh4554 2024. 11. 14. 22:32

네트워크 수업을 들으면서 매치메이킹 부분에서부터 명절 고속도로마냥 꽉 막힌 기분의 연속이었다.

당장 네트워크 자체도 신경쓸게 너무 많아 어려운마당에 새로운 photonNetwork 메서드가 수없이 많고 콜백함수들도 너무 많았기 때문에 클론코딩을 하면서도 머리에 잘 들어오지 않았다.

블로그에 쓰면서 조금이라도 더 이해하고 외워보고자 작성하게 됐다.


1. 포톤 구현 컨셉

:

클라이언트 측에서 서버측으로 PhotonNetwork를 통하여 요청을 하고

서버에서 클라이언트 측으로 MonoBehaviourPunCallbacks 클래스를 통하여 콜백 함수를 통해 응답하는 방식으로 요청을 처리한다.


2. PhotonNetwork 메서드

일단은 자주 사용하는 것으로 생각되는 것들만 작성했다.

(실제로는 훨씬 많다)

1) 네트워크 동기화 및 설정

메서드명 기능
ConnectUsingSettings 서버에 연결하기 위해 설정 파일을 사용하여 연결을 시작
JoinLobby 로비에 연결하여 방 목록을 가져옴
DisConnect 서버와의 연결을 해제

 

2) 방 관리

메서드명 기능
CreatRoom 새로운 방을 생성합니다
JoinRoom 방에 참가합니다
LeaveRoom 방을 떠납니다
JoinRandomRoom 랜덤한 방에 참가합니다
JoinRandomRoomOrCreatRoom 랜덤한 방에 참가하거나 방이 없으면 새로운 방을 생성합니다.
CurrentRoom 현재 플레이어가 속한 방 정보를 가져옵니다.
CurrentRoom.IsOpen 방을 입장가능/불가 상태로 설정
CurrentRoom.IsVisible 방을 공개/비공개로 설정

 

3) 플레이어 관리

메서드명 기능
LocalPlayer 로컬 플레이어(사용자 클라이언트)의 정보를 가져옵니다
PlayerList 방에 참가한 플레이어 목록을 가져옵니다
IsMasterClient 현재 플레이어가 방장인지 확인합니다
PlayerListOthers 로컬 플레이어를 제외한 현재 방에 참가한 플레이어 목록을 가져옵니다
NetworkClientState 현재 클라이언트의 상태를 확인합니다(연결됨, 로비, 방 등)

 

4) 객체/플레이어 동기화

메서드명 기능
Instantiate 네트워크 상에 공유될 객체를 생성
Destroy 네트워크 객체를 삭제
SetPlayerCustomProperties 플레이어 커스텀 프로퍼티를 설정
LoadLevel 네트워크 상에서 씬 이동으로 사용(함께 이동)
AutomaticallySyncScene = true/false 방장이 씬을 이동하면 다른 클라이언트들은 자동으로 따라오게 할지에 대한 여부

+ 커스텀 프로퍼티에 대해서는 추후 다룰 예정 (현재 정확히 이해 못한 상태)


3. 콜백 메서드

위 photonnetwork 메서드를 통해 클라이언트로부터 요청을 받은 서버가 MonobehaviourPunCallbacks 클래스를 통해 응답하는 콜백 메서드를 정리했다.

 - 마찬가지로 자주 사용하는 것으로 보이는(주관적) 메서드 위주로 정리하였으며, 실제론 훨씬 많다.

 - 콜백 메서드의 내부 로직을 알맞게 구성해서 상황에 맞는 기능이 실행되도록 할 수 있다.

 - 클래스를 설정하고 public override 를 통해 불러낼 수 있다.

 

1) 네트워크 상태

메서드명 기능
OnConnected 서버에 입장을 성공했을 때 호출(마스터 서버 연결 이전. 방 생성, 참가 불가)
OnConnectedToMaster 마스터 서버에 연결되었을 때 호출(마스터 서버 연결. 방 생성, 참가 가능)
OnDisconnected(DisconnectCause cause) 서버에서 연결이 끊어졌을 때 // 끊어진 이유 제공

2) 로비

메서드명 기능
OnJoinedLobby 로비에 입장했을 때 호출
OnLeftLobby 로비에서 퇴장했을 때 호출
OnRoomListUpdate(List<RoomInfo> info) 로비에서 방 목록이 업데이트 되었을 때 호출 // 방 정보 리스트 제공

3) 방 관리

메서드명 기능
OnJoinedRoom 방에 입장했을 때 호출
OnCreatedRoom 방을 생성했을 때 호출
OnCreateRoomFailed(short returnCode, string message) 방 생성 실패시 호출 // 실패 원인 코드와 추가로 실패 사유 제공
OnJoinRoomFailed(short returnCode, string message) 방 참가 실패시 호출 // 실패 원인 코드와 추가로 실패 사유 제공
OnJoinRandomFailed(short returnCode, string message) 방 랜덤 참가 실패시 호출  // 실패 원인 코드와 추가로 실패 사유 제공
OnLeftRoom 방에서 퇴장했을 때 호출

4) 플레이어 관리

메서드명 기능
OnPlayerEnteredRoom(Player newPlayer) 다른 새로운 플레이어가 방에 들어왔을 때 호출
OnPlayerLeftRoom(Player otherPlayer) 다른 플레이어가 방에서 퇴장했을 때 호출
OnPlayerPropertiesUpdate
(Player targetPlayer,
Hashtable changedProps)
플레이어의 정보가 변경되었을 때 호출 // 대상 플레이어에 대한 정보와 변경된 속성의 이름과 새로운 값 제공
OnMasterClientSwitched
(Player newMasterClient)
방장이 변경되었을 때 호출 // 새로운 방장 클라이언트에 대한 정보 제공

 


 

뭔가 이벤트를 활용하는 것과 비슷한 느낌을 받았다.

얼른 적응해야지...

 

 

 

 

** 틀린 정보나 저의 개발공부에 도움을 주실 추가 정보를 알고 계시다면 댓글로 남겨주세요**