Unity/네트워크

유니티와 Phton Pun 네트워크 연동 - Part2 (스크립트 콜백,동기화)

mynote6590 2025. 3. 14. 10:06

 

// Pun을 사용할때 기본적으로 필요함
using Photon.Pun;
// ??
using Photon.Realtime;

 

 

콜백

MonoBehaviourPunCallbacks : 네트워크 이벤트 감지할 때 사용

// 버전 1.0으로 설정 : 같은 버전의 플레이어끼리만 매칭 되도록
PhotonNetwork.GameVersion ="1.0";

// AppId를 입력한 Photon Server Setting 정보 기반으로 서버에 연결 
PhotonNetwork.ConnectUsingSettings();

// 네트워크에 연결된 사용자 아이디
PhotonNetwork.NickNam();




// 서버에 성공적으로 연결되었을 때 콜백되는 함수
public override void OnConnectedToMaster(){}

// 방에 성공적으로 연결되었을 때 콜백되는 함수
public override void OnPlayerEnteredRoom(Player newPlayer)

// 방에서 나가고 난 후 콜백되는 함수
public override void OnLeftRoom()

// 로비에 성공적으로 연결되었을 때 콜백되는 함수
 public override void OnJoinedLobby()
 
 // 방 정보가 변경되었을 때 콜백되는 함수
 public override void OnRoomListUpdate(List<RoomInfo> roomList)
 
 // 방장을 바꿔주는 함수
 public override void OnMasterClientSwitched(Player newMasterClient){}

 

 

동기화

 

동기화란?

Onwer가 자신의 변화값을 다른 local에 있는 자신 복제본에게 전달해주는 것

 

 

PhotonView

동기화 해야 하는 오브젝트에 PhotonView컴포넌트를 붙여주면 쉽게 동기화를 할 수 있다

1.Rpc

특정 이벤트가 발생했을 때 즉각적으로 다른 클라이언트에게 알려야 할 때 사용한다. 예를 들어, 플레이어가 특정 버튼을 누르거나, 아이템을 사용하는 등의 일회성, 비동기적인 행동을 다른 클라이언트와 동기화하고 싶을 때 유용하다.

PhotonView photonView

// 로컬 클라이언트를 제외한 모든 원격 클라이언트에게 RPC를 호출
photonView.RPC("TestFuntion",RpcTarget.Others,인자값);

// 모든 클라이언트(로컬 및 원격)에게 호출
photonView.RPC("TestFuntion",RpcTarget.All,인자값);

[PunRPC] void TestFuntion(){};

 

 

2.IPunObservable

게임 오브젝트의 상태(위치, 회전, 점수 등)가 지속적으로 변할 때 사용한다. 이 인터페이스를 구현하면OnPhotonSerializeView 메서드를 통해 객체의 상태를 주기적으로 자동으로 동기화할 수 있다.

public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
    if(stream.IsWriting == true)
    {
        stream.SendNext(isFiring); // 내 정보 보내기
    }
    else
    {
        isFiring = (bool)stream.ReceiveNext(); // 상대방의 정보 받아오기
    }
}