내일배움캠프 50일차 6/26 TIL + Photon 네트워크
Photon
Photon 닉네임 설정
photonView.Owner.NickName
위와 같이 Photon을 통해 각 플레이어의 닉네임을 설정할 수 있습니다.
OnPhotonSerializeView()
OnPhotonSerializeView
는 Photon의 주요 메서드 중 하나로, 네트워크를 통해 오브젝트의 상태를 동기화하는 데 사용됩니다. 이 메서드는 PhotonView가 있는 객체에 추가할 수 있으며, 상태를 보내고 받을 때 호출됩니다.
기본 사용법
OnPhotonSerializeView
메서드는 다음과 같은 형태로 작성됩니다:
void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.IsWriting)
{
// 데이터를 보내는 부분
stream.SendNext(transform.position);
stream.SendNext(transform.rotation);
}
else
{
// 데이터를 받는 부분
transform.position = (Vector3)stream.ReceiveNext();
transform.rotation = (Quaternion)stream.ReceiveNext();
}
}
설명
- stream.IsWriting: 이 부분은 로컬 플레이어가 데이터를 보내는 경우에 해당합니다. 여기에서 오브젝트의 위치와 회전 값을 네트워크로 전송합니다.
- stream.SendNext(): 데이터를 전송합니다. 예를 들어, 오브젝트의 위치와 회전을 전송할 수 있습니다.
- stream.ReceiveNext(): 데이터를 수신합니다. 네트워크를 통해 전송된 데이터를 받아오며, 여기서는 오브젝트의 위치와 회전을 갱신합니다.
예제 코드
아래는 OnPhotonSerializeView
를 활용한 예제 코드입니다. 이 코드는 네트워크를 통해 오브젝트의 위치와 회전을 동기화합니다.
public class NetworkedObject : MonoBehaviour, IPunObservable
{
private PhotonView photonView;
void Start()
{
photonView = GetComponent<PhotonView>();
}
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.IsWriting)
{
// 로컬 플레이어가 데이터를 전송
stream.SendNext(transform.position);
stream.SendNext(transform.rotation);
}
else
{
// 원격 플레이어가 데이터를 수신
transform.position = (Vector3)stream.ReceiveNext();
transform.rotation = (Quaternion)stream.ReceiveNext();
}
}
}
참고사항
- 간단한 데이터 전송:
OnPhotonSerializeView
는 간단한 데이터 전송에 매우 유용합니다. 위치, 회전, 스케일 등의 기본 데이터를 전송할 때 주로 사용됩니다. - 네트워크 부하 관리: 빈번한 데이터 전송은 네트워크 부하를 증가시킬 수 있으므로, 필요한 데이터만 전송하는 것이 중요합니다.
- 동기화 주기: Photon의 동기화 주기를 설정하여 데이터 전송 빈도를 조절할 수 있습니다. 이는 네트워크 성능에 큰 영향을 미칩니다.