[Photon Unity Network] 방의 사용자 정의 속성을 살짝 설명해 주세요.

문장 환경


Unity 2019.1.0f2
Photon Unity Network(1.97)

방의 사용자 정의 속성은 무엇입니까?


요컨대, 이것은 방 안에서 공유할 수 있는 해시 시계다.
(주의: 해시 테이블은 C#에서 말하는 Dictionary)

사용 방법


RoomPropertyTest.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RoomPropertyTest : MonoBehaviour
{
    // ハッシュテーブルを宣言
    ExitGames.Client.Photon.Hashtable roomHash;

    // ローカルで使っているハッシュをルームにセット
    public void SetRoomProperty()
    {
        // ハッシュに要素を追加(同じ名前があるとエラーになる)
        roomHash.Add("hoge", 0);

        // ハッシュに要素を追加、既に同じ名前のキーがあれば上書き
        roomHash["hoge"] = 1;

        // ルームにハッシュを送信する
        PhotonNetwork.room.SetCustomProperties(roomHash);
    }

    // ルームのハッシュが送信されたら、送信されたハッシュが入ってくる(Photonの機能で戻り値の型、関数名、引数を一致させると勝手に呼ばれる)
    public void OnPhotonCustomRoomPropertiesChanged(ExitGames.Client.Photon.Hashtable changedRoomHash)
    {
        // 変更されたハッシュを受け取る
        roomHash = changedRoomHash;
    }
}

설명

// ハッシュテーブルを宣言
ExitGames.Client.Photon.Hashtable roomHash;
[Exit Games. Client. Photon] C#에 원래 있는 Hashtable과 구별하기 위해서입니다.
public void SetRoomProperty()
{
    // ハッシュに要素を追加(同じ名前があるとエラーになる)
    roomHash.Add("hoge", 0);

    // ハッシュに要素を追加、既に同じ名前のキーがあれば上書き
    roomHash["hoge"] = 1;

    // ルームにハッシュを送信する
    PhotonNetwork.room.SetCustomProperties(roomHash);
}
다음은 SetRoomProperty 함수입니다. 이렇게 합시다.
이 Hashtable은 Dictionary 클래스를 완전히 계승했기 때문에 사용 방법과 Dictionary는 아무런 변화가 없습니다.
유일하게 신기한 게 이 부분인가요?
// ルームにハッシュを送信する
PhotonNetwork.room.SetCustomProperties(roomHash);
나는 여기서 Photon의 기능을 사용한다.
로컬에서 내용을 변경한 Hashtable을 현재 자신의 방으로 보냅니다.
// ルームのハッシュが送信されたら、送信されたハッシュが入ってくる(Photonの機能で戻り値の型、関数名、引数を一致させると勝手に呼ばれる)
public void OnPhotonCustomRoomPropertiesChanged(ExitGames.Client.Photon.Hashtable changedRoomHash)
{
    // 変更されたハッシュを受け取る
    roomHash = changedRoomHash;
}
마지막으로 OnPhoton CustomRoomPropertiesChanged 함수입니다.
이 함수는 Photon이 준비한 함수입니다. 주석과 같이 반환 값의 유형, 함수 이름, 매개 변수를 일치시킨다고 합니다.
유니티의 스크립트 시간과는 조금 다르지만 외관상으로는 똑같다
부르는 타이밍은 방에 새 산열을 보낼 때다.
다음은 절차입니다.

주의사항


방 속성은 방으로 설정된 속성이기 때문에 방에 들어간 후에 설정하지 않으면 오류가 발생할 수 있습니다.
또한 PunTurnManager는 Photon의 유턴을 제어하는 기능이지만 제어 방법은 방 속성을 사용하기 때문에 새 값을 방 속성으로 설정하려면 PunTurnManager 클래스를 확장해야 합니다.공식 참조에도 적혀있다고 생각해요.
값을 다시 설정해야 한다면 혼자서 회전 제어를 만드는 것이 비교적 빠를 수 있다.

포장류


매번 속성을 사용할 때마다 긴 함수를 써야 하는데 솔직히 힘들기 때문에 포장류를 만드는 것을 추천합니다.
제가 먼저 예를 들도록 허락해 주십시오.
PhotonProperty.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PhotonProperty : MonoBehaviour
{
    // ルームプロパティ用のハッシュ(Dictionary)
    private static ExitGames.Client.Photon.Hashtable roomHash;

    private void Start()
    {
        // ルームプロパティ用のこのプレイヤーのハッシュ(Dictionary)を生成
        roomHash = new ExitGames.Client.Photon.Hashtable();
    }

    // ルームプロパティ ===========================================

    // RoomPropertyが更新された時に呼ばれる
    public void OnPhotonCustomRoomPropertiesChanged(ExitGames.Client.Photon.Hashtable changedRoomHash)
    {
        // 更新したプレイヤーが保持しているハッシュを入れる
        roomHash = changedRoomHash;
    }

    // ルームプロパティのセット -----------------------------------
    // キーが既に存在していたら上書き
    public static void SetRoomProperty<T>(string key, T value)
    {
        roomHash[key] = value;

        // 自身のハッシュをネット上に送信
        PhotonNetwork.room.SetCustomProperties(roomHash);
    }

    // 一次元配列用
    public static void SetRoomPropertyArray<T>(string key, T[] value)
    {
        // 要素数256を超える場合はここをshortなどに変更してください
        for(byte i = 0; i < value.Length; i++)
        {
            roomHash[key + i] = value[i];
        }

        // 自身のハッシュをネット上に送信
        PhotonNetwork.room.SetCustomProperties(roomHash);
    }

    public static void SetRoomPropertyArray<T>(string key, byte arrayNum, T value)
    {
        roomHash[key + arrayNum] = value;

        // 自身のハッシュをネット上に送信
        PhotonNetwork.room.SetCustomProperties(roomHash);
    }

    // キーが既に存在している場合エラーが出る
    public static void SetRoomPropertyAdd<T>(string key, T value)
    {
        roomHash.Add(key, value);

        // 自身のハッシュをネット上に送信
        PhotonNetwork.room.SetCustomProperties(roomHash);
    }

    // ルームプロパティをゲット -----------------------------------
    public static T GetRoomProperty<T>(string key)
    {
        // outを受け取るための変数を用意
        object value;

        // 指定したキーがあれば返す
        if (roomHash.TryGetValue(key, out value))
        {
            // ボックス化解除
            return (T)value;
        }

        // 無かったらnullが返る
        return (T)value;
    }

    // 一次元配列用
    public static T GetRoomPropertyArray<T>(string key, byte arrayNum)
    {
        // outを受け取るための変数を用意
        object value;

        // 指定したキーがあれば返す
        if(roomHash.TryGetValue(key + arrayNum, out value))
        {
            // ボックス化解除
            return (T)value;
        }

        return (T)value;
    }
    // ============================================================
}
다음은 각 함수의 사용 방법을 총결하였다.
        // 値の設定方法
        // ===============================================================
        // hogeというキーで0をセット
        PhotonProperty.SetRoomProperty("hoge", 0);

        // 一次元配列を作成
        int[] array = { 0, 1, 2, 3 };
        // arrayというキーでarray配列をセット
        PhotonProperty.SetRoomPropertyArray("array", array);
        // ===============================================================

        // 値の取得方法
        // ===============================================================
        // 戻り値の型をint型に指定してキーを入力
        int hoge = PhotonProperty.GetRoomProperty<int>("hoge");

        // 戻り値の型をint型に指定してキーと取得したい要素番号を入力
        int fuga = PhotonProperty.GetRoomPropertyArray<int>("array", 0);
        // ===============================================================
가능하면 사용하세요.

웹 페이지 정보


[Unity] 저도 Photon #11 사용자 정의 속성을 사용하고 싶어요.

좋은 웹페이지 즐겨찾기