Unity Network : Photon Pun2 - PhotonView, IPunObservable, RPC

2026. 1. 7. 17:04·Unity

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
'Unity' 카테고리의 다른 글
  • Unity : 관리자 콘솔 구현 및 프리징 현상 개선
  • Unity : Firebase 등록 및 Auth로 (이메일/소셜) 로그인 구현
  • Unity Network : Photon Pun 2 - Lobby / Room
  • Unity UI: 코드로 레이아웃 제어 vs 프리팹 기반 구성
ellug
ellug
Web / App / Game Dev
  • ellug
    dev.ellug
    ellug
  • 전체
    오늘
    어제
    • 분류 전체보기 (95)
      • Javascript (React, Next) (1)
      • C# (66)
      • Graphics (1)
      • Unity (25)
      • 프로그래머스 (0)
        • Lv.0 (0)
        • Lv.1 (0)
        • Lv.2 (0)
        • Lv.3 (0)
      • AI Agent (0)
      • StableDiffusion (0)
      • ETC (1)
      • 잡담 (0)
      • 유머 (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    추상 클래스
    list
    알고리즘
    console
    유니티
    interface
    게임
    Network
    Design Pattern
    stack
    Abstract
    Photon
    클래스
    콘솔
    function
    unity
    스택
    터미널
    firebase
    class
    Queue
    네트워크
    C#
    inputsystem
    큐
    useState
    자료구조
    최적화
    struct
    delegate
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
ellug
Unity Network : Photon Pun2 - PhotonView, IPunObservable, RPC
상단으로

티스토리툴바