참고 사이트 : https://doc.photonengine.com/ko-kr/pun/current/demos-and-tutorials/pun-basics-tutorial/intro
PUN의 콜백은 2가지 구현 방식을 제공한다.
PUN은 다음과 같은 C# 인터페이스를 제공한다.
- IConnectionCallbacks: 연결 관련 콜백.
- IInRoomCallbacks: 룸 내부 관련 콜백
- ILobbyCallbacks: 로비 관련 콜백
- IMatchmakingCallback: 매치메이킹 관련 콜백
- IOnEventCallback: 수신된 이벤트 단일 콜백
C# 이벤트LoadBalancingClient.OnEventReceived와 동등하다- IWebRpcCallback: WebRPC 오퍼레이션 응답 수신에 대한 단일 콜백
- IPunInstantiateMagicCallback: PUN 프리팹의 인스턴스화에 대한 단일 콜백
- IPunObservable: PhotonView 직렬화 콜백 (변수 동기화 때 사용한다.)
- IPunOwnershipCallbacks: PUN 소유권 이전 콜백.
콜백 인스턴스는 등록 후에 등록을 해제해야 한다. (OnEnable(), OnDisable() 같은 곳에서)
MonoBehaviour와 콜백 인터페이스를 상속받은 클래스를 생성하는 대신,
프로퍼티와 가상 메서드를 사용할 수 있는 MonoBehaviourPunCallbacks를 상속 받으면 오타에 대해 걱정할 필요 없고, 모든 메서드를 구현할 필요 없기 때문에 상대적으로 쉬운 구현 방식이다.
콜백 인스턴스 기본 규칙인 OnEnable() 또는 OnDisable() 호출할 필요가 없다.
혹시나 OnEnable() 및 OnDisable()을 오버라이드 했다면 부모 클래스의 메서드를 호출해야 한다.
OnConnectedToMaster()와 OnDisconnected()로 연습하겠다.
Launcher 클래스의 상속을 MonoBehaviour에서 MonoBehaviourPunCallbacks로 변경한다.
using Photon.Realtime;
public override void OnConnectedTOMaster()
{
Debug.Log("OnConnectedToMaster()");
PhotonNetwork.JoinRandomRoom(); // 랜덤 Room 입장 시도
}
// PhotonNetwork.JoinRandomRoom(); 실패 시 아래 콜백을 받는다
public override void OnJoinRandomFailed(short returnCode, string message)
{
Debug.Log("OnJoinRandomFailed()"); // 랜덤 Room 입장 실패
PhotonNetwork.CreateRoom(null, new RoomOptions());
}
// PhotonNetwork.JoinRandomRoom(), PhotonNetwork.CreateRoom()의 입장 성공 시 아래 콜백을 받는다.
public override void OnJoinedRoom()
{
Debug.Log("OnJoinedRoom()");// Room 입장 성공 시
}
public override void OnDisConnected(DisconnectCause cause)
{
Debug.Log("OnDisConnected()");
}