1 minute read

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의 동기화 주기를 설정하여 데이터 전송 빈도를 조절할 수 있습니다. 이는 네트워크 성능에 큰 영향을 미칩니다.