Unity Plus

48,394円 /年



Unity Pro


217,800円 /年

Unity認定資格

Unity学習
基本英語です

50%OFFセール中だ!!

セール期間残り

{{timeleftshow}}


今日だけのセール:70%OFF
{{todaysaleleft}}

PhotonのCustomPropertyを使う

前提:

  • Unity-Ver-2019.3.9f
  • Pun-Ver-2.17

PhotonにはCustomPropertyという便利なものがあります。

ルームかプレイヤーに設定できるHash値です。値を変更したらコールバックも呼ばれます。

ちょっと迷ったんでMEMOっておきます。

といっても使い方は簡単で、

現在のHash値を取得して値を追加するだけです。

RoomかPlayerに応じて対応するコールバックが呼ばれます。


最初は,New HashTable()で新しくHashインスタンスを生成して、それをセットしてたらちゃんと動きませんでした。

これだけでえらく時間取られた……。

  • System.Collections.HashtableじゃなくてExitGames.Client.Photon.Hashtableを使う
  • Hash値は直接生成せずにRoom.CustomPropertiesから取得して、欲しい値を追加して、またSetCustomPropertiesでセットしなおす
  • 値を読み書きする前にtrygetvalue()を使った方が良いかも
  • なんか知んないけどコールバックが複数回呼ばれることがあって、プロパティがちゃんと入ってない時がある。Editorだけかも。使うときはKeyをもっているか確認した方が良いかも。

これだけ気を付ければ普通に使えそうです。

セットできる型は文字列だけなので、数字とかはParseして入力取得する必要があります。

コメント

  1. うどん より:

    初めまして。自分もPUN2を使っていて、オンラインボードゲームを開発しています。
    ゲーム内の値を同期させたくてこの記事を参考にさせて頂き、実装しました。
    記事に書かれているようにOnRoomPropertiesUpdateのコールバックが複数回呼ばれてしまっているような挙動をしてうまく動いてくれません。
    コールバックが複数回呼ばれてしまう条件とかって何かご存じだったりしませんでしょうか?

    • げんとめ(管理人) より:

      私もちょっと色々試してみたんですが、はっきりしませんでした。
      下の記事にあったんですが、値をセットする前に
      props.Trygetvalue()
      を使って、値を持っているか確認したうえでセットしたら、自分の環境では上手くいくようになってしまったもので、それ以上はまってないんです。
      https://stackoverflow.com/questions/56978277/question-about-photonnetwork-currentroom-customproperties

      直接の関係はないと思うので原因は不明のままです。
      お力になれず申し訳ないです。

  2. 匿名 より:

    げんとめさん
    返信ありがとうございます。大変参考になる情報をありがとうございます!

    今まで値をOnRoomPropertiesUpdateでカスタムプロパティの変更を受信する時にはTryGetValueを使ってkeyの有無を判定していたのですが、セットする時も確認のコードを挟んだ方が良さそうですね。

    セットする前にkeyを持っているとは思うのですが、何か見落としがあったのかもしれません。試してみます!ありがとうございました!

  3. うどん より:

    げんとめさん
    返信ありがとうございます。大変参考になる情報をありがとうございます!

    今まで値をOnRoomPropertiesUpdateでカスタムプロパティの変更を受信する時にはTryGetValueを使ってkeyの有無を判定していたのですが、セットする時も確認のコードを挟んだ方が良さそうですね。

    セットする前にkeyを持っているとは思うのですが、何か見落としがあったのかもしれません。試してみます!ありがとうございました!