PhotonView
- Photon 네트워크에서 동기화 단위의 기준점
- 네트워크 상에서 하나의 오브젝트를 식별하는 ID
- RPC, 변수 동기화, Ownership 판단의 기준
- PhotonView가 없는 오브젝트는 네트워크에 존재하지 않는다
| 역할 | 설명 |
| 네트워크 ID | ViewID로 객체 식별 |
| 소유권 관리 | Owner / IsMine |
| RPC 송신 | View 기준 호출 |
| 변수 동기화 | Observe 대상 지정 |
PhotonView pv;
pv.IsMine // 내가 소유한 오브젝트인가
pv.Owner // 소유 Player
pv.Owner.ActorNumber // pv의 인덱스처럼 1000씩 증가하는 고유 값
pv.ViewID // 네트워크 고유 ID
pv.RPC(함수명, RpcTarget.Others, 함수 파라미터);
IPunObservable : 변수 동기화
- 변수의 상태를 지속적으로 동기화하는 방식
- 위치, 회전, 체력, 속도 등
- 상태(State) 동기화 활용
- 매 프레임 or 고정 주기로 전송
public class PlayerSync : MonoBehaviour, IPunObservable
{
public float hp;
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.IsWriting)
stream.SendNext(hp);
else
hp = (float)stream.ReceiveNext();
}
}
- Writing : Owner가 데이터 전송
- Readding : 다른 클라이언트가 수신
- Owner → Others 단방향
- PhotonView의 Observe 대상에 등록되어야 동작
| 적합한 경우 | 부적합한 경우 |
| 위치, 회전 | 단발성 이벤트 |
| 체력, 쿨타임 | 버튼 클릭 |
| 애니메이션 파라미터 | 공격 판정 |
RPC (Remote Procedure Call) : 함수 동기화
- 메서드 호출 사실을 네트워크로 전파하는 방식
- 이벤트 기반
- 한 번만 실행
- 명확한 타이밍 보장
[PunRPC]
void PlayHitEffect(int damage)
{
Debug.Log($"Hit: {damage}");
}
pv.RPC("PlayHitEffect", RpcTarget.All, 10);
RPC에 사용할 메서드에는 [PunRPC] 해줘야 한다
RPC Target 종류
| All | 모든 플레이어 |
| Others | 나 제외 |
| MasterClient | 방장 |
| AllBuffered | 늦게 들어온 플레이어도 실행 |
IPunObservable vs RPC
| IPunObservable | RPC | |
| 성격 | 상태 동기화 | 이벤트 전달 |
| 호출 방식 | 자동 | 수동 |
| 빈도 | 지속적 | 단발 |
| 신뢰성 | 상태 기준 | 호출 기준 |
| 대표 용도 | 위치, 체력 | 공격, 이펙트 |
IPunObservable 과 RPC 중 무엇을 어디에 사용할지 적절히 설계하는 것이 중요
동작 예시 시나리오
입력은 IsMine 에서만 처리
if (!pv.IsMine) return;
HandleInput();
상태는 IPunObservable, 결과는 RPC
- 체력 감소 : IPunObservable
- 피격 이펙트 : RPC
RPC 남발은 네트워크 부하의 원인이 될 수 있으므로 상태 동기화는 Observable로 해결하는 게 좋다고 한다
또한 모든 클라이언트에서 로직을 실행하지 않도록 주의하자.
어떤 로직을 누가 실행할지를 잘 설계하고 방어코드를 작성해야 한다.
'Unity' 카테고리의 다른 글
| Unity : 관리자 콘솔 구현 및 프리징 현상 개선 (0) | 2026.02.08 |
|---|---|
| Unity : Firebase 등록 및 Auth로 (이메일/소셜) 로그인 구현 (0) | 2026.01.11 |
| Unity Network : Photon Pun 2 - Lobby / Room (0) | 2026.01.07 |
| Unity UI: 코드로 레이아웃 제어 vs 프리팹 기반 구성 (0) | 2026.01.05 |
| 네트워크 : OSI, TCP/IP, Client-Server, P2P (1) | 2026.01.05 |