ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Photon 동기화 방식 - Custom Properties
    게임 클라이언트 개발/Photon 2023. 11. 7. 00:12

    Photon 동기화 방식은 크게 5가지가 있다. 그 중 Custom Properties에 관한 글이다.

     

    Custom Properties

    ExitGames.Client.Photon.Hashtable 반환형의 Dictionary로 게임 내에서 자주 변하지 않는 변수(Ex. 스테이지 클리어 시 다음 스테이지로 가는 문이 열렸는지 여부에 대한 변수 등)를 동기화할 때 사용한다.

     

    Key는 string 타입, Value는 object 타입이고 RPC Method의 파라미터와 마찬가지로 기본 타입만 Value로 사용할 수 있다.

     

    Custom Properties는 Room과 Player에 모두 존재하며 로컬 클라이언트에서 수정하면 모든 클라이언트에 업데이트된다.

     

    코드 사용법

    1. Set ,Get

    using PhotonHashTable = ExitGames.Client.Photon.Hashtable;
    
    // Get
    PhotonHashTable roomSetting = PhotonNetwork.CurrentRoom.CustomProperties;
    PhotonHashTable playerSetting = PhotonNetwork.LocalPlayer.CustomProperties;
    
    // Properties의 값 가져오기
    // Value가 object 타입이기 때문에 타입 캐스팅 필요
    int healthPoint = (int)playerSetting["HealthPoint"];
    
    // Properties 수정
    if (roomSetting.ContainsKey("RoomName"))
    {
    	roomSetting["RoomName"] = "Test";
    }
    else
    {
    	roomSetting.Add("RoomName", "Test");
    }
    
    // Set
    PhotonNetwork.CurrentRoom.SetCustomProperties(roomSetting);
    PhotonNetwork.LocalPlayer.SetCustomProperties(playerSetting);

     

    2. Callback

    // MonoBehaviourPunCallbacks를 상속 받아야 함.
    // 변경된 프로퍼티가 아닌 모든 프로퍼티가 전달됨.
    // 두 콜백 함수는 플레이어가 방에 참여한 상태에서만 호출됨.
    
    public override void OnRoomPropertiesUpdate(PhotonHashTable propertiesThatChanged)
    {
    
    }
    
    public override void OnPlayerPropertiesUpdate(Player targetPlayer, PhotonHashTable changedProps)
    {
    
    }

     

    주의 사항

    로컬 클라이언트에서 Custom Properties를 수정하면 모든 클라이언트에서 동기화되므로 RPC Method 내에서 Custom Properties를 수정할 경우 여러 클라이언트에서 호출되지 않도록 주의할 것. 보통 Master 클라이언트에서 수정함.

     

    Custom Properties는 일부분만 수정하고 싶어도 Dictionary 전체를 전송해야하기 때문에 플레이어의 위치와 같이 자주 동기화가 필요한 부분이라면 다른 동기화 방법을 사용해야 함.

Designed by Tistory.