센로그

[PUN2] IPunObservable 본문

게임/PUN2(Unity)

[PUN2] IPunObservable

seeyoun 2023. 7. 24. 17:27

◆ IPunObservable 이란?

관찰할 데이터들을 주고받으며 동기화 해주도록 구현할 수 있는 인터페이스

이 인터페이스를 상속받은 스크립트는 인터페이스 메서드인 OnSerializeView()를 꼭 구현해줘야 하며,
PhotonViewObserved Components란에 추가하여 관찰할 수 있다.

위 그림에서 PhotonView는 IPunObservable을 상속한 PlayerMove클래스의 OnSerializeView()를 호출하여 동기화한다.
이때, 초당 PhotonNetwork.SerializationRate로 설정된 만큼의 비율로 호출한다. (get 및 set 가능)
 
stream을 주고 받는 만큼, 안에 int, string 등을 포함하여 전달할 수 있다.
따라서 간단한 변수 동기화에 많이 쓴다.
 


◆ IPunObservable 사용법

1) IPunObservable 인터페이스를 상속받고,
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)를 구현해 줌.
2) 해당 스크립트를 PhotonView의 Observed Components에 추가.

※ 인터페이스인 만큼, 무조건 인터페이스 메서드를 구현해줘야 함
 
[예시]

public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
    if (stream.IsWriting) 				//보내는 데이터 (브로드캐스트)
    	stream.SendNext(txt.text);			
    else 						//받는 데이터
    	txt.text = (string)stream.ReceiveNext();	//받고 타입캐스팅 해주기
}

여러 데이터를 주고받는 경우, 데이터를 보낸 순서와 받는 순서가 동일함. (받을 때는 타입 캐스팅 해줘야 함)

Comments