Help us understand the problem. What is going on with this article?

PUN2のカスタムルームプロパティを変更する

はじめに

Unity使ってゲーム作るぞ~ オンラインゲーム作るぞ~
と意気込んで、さっと調べて目についたPhoton Unity Networking(PUN)でオンライン要素を実装することにしました。

まあ、さっと調べた時に色んなブログさんで参考資料見つけたし、正直余裕でしょ!とか思っていたら微妙なところで躓いたので備忘録として書いておきます。

PUNにはVer 1.~とVer 2.~がありまして、PUNのスタートアップを紹介しているところだとPUN2をダウンロードしましょう!ってあるんですが、実際にPUNでこういうのを実装しました!ってとこだとPUN1のほうってことが結構ありました。
そんでもってPUN1とPUN2でマイナーチェンジがちょこちょこあるもんだから、実際にコード書くと「そんなクラスはない!」だとか「そんなメソッドはない!」って怒られます。

タイトルのカスタムルームプロパティもその類のもので、実装までに時間がかかりました。

カスタムルームプロパティ

using UnityEngine;
using Photon.Pun;

public class RoomProperties : MonoBehaviourPunCallbacks
{
    ExitGames.Client.Photon.Hashtable roomHash;
    float time = 60.0f;

    void Start()
    {
        //ルームプロパティ設定
        roomHash = new ExitGames.Client.Photon.Hashtable();
        roomHash.Add("Time", time);
        PhotonNetwork.CurrentRoom.SetCustomProperties(roomHash);
    }

    void Update()
    {
        time -= Time.deltaTime;
        roomHash["Time"] = time;
        PhotonNetwork.CurrentRoom.SetCustomProperties(roomHash);
    }

    //ルームプロパティが変更されたときに呼ばれる
    public override void OnRoomPropertiesUpdate(ExitGames.Client.Photon.Hashtable propertiesThatChanged)
    {
        object value = null;
        //変更のあったプロパティに"Time"が含まれているならtimeを更新
        if (propertiesThatChanged.TryGetValue("Time", out value))
        {
            time = (float)value;
        }
    }
}

とりあえず注意するところは、
PhotonNetwork.CurrentRoom.SetCustomProperties(roomHash)と
OnRoomPropertiesUpdate(ExitGames.Client.Photon.Hashtable propertiesThatChanged)です。
この2か所がPUN1から変更があるのでうっかりすると、エラーを吐き続けます。

あと、どれだけ値が更新されようがPhotonNetwork.CurrentRoom.SetCustomProperties(ExitGames.Client.Photon.Hashtable HashTable)を実行しないとそのルーム内では共有されません。
更新する値は一つだけということもなく、同時に複数の値を更新した後にSetCustomPropertiesを実行すると変更された値が全て更新されます。
更新するカスタムルームプロパティの値の種類だけ、OnRoomPropertiesUpdateにif文を書いておけばそれぞれが更新されます。

ちなみに、上記のように毎フレーム更新なんてことしたら通信量がガンガン増えるのでやめておいた方がいいです。

さいごに

困ったら公式リファレンスだ!
それでも無理なら現物のコードを追う!!

TN0321
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした