実現したいこと
Room入室後、参加者全員が準備完了状態になってから、マスタークライアントにゲーム開始ボタンを表示させたい
試したこと
自分の準備完了ボタンを押すと、bool変数にtrueを(再度押すとfalseを)入れるようにしました
それをカスタムプロパティを使い全員に同期し、全員がtrueになったらマスタークライアントにだけゲーム開始ボタンを表示するように試してみました
(最大4人ですがテストということで2人までで試してます
発生している問題
同期されない
カスタムプロパティについての知識が浅い
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6using Photon.Pun; 7using Photon.Realtime; 8 9public class Lobby2UI : MonoBehaviourPunCallbacks 10{ 11 public Button StartButton;//ゲーム開始ボタン 12 13 public Text namelavel; 14 public Text namelavel2; 15 16 public Button ok1;//準備完了ボタン 17 public Button ok2;//準備完了ボタン2 18 19 public Text test1;//準備状態表示用 20 public Text test2;//準備状態表示用2 21 22 int id; 23 24 ExitGames.Client.Photon.Hashtable roomHash; 25 bool ready = false; 26 bool ready2 = false; 27 28 29 30 void Start() 31 { 32 33 if (!PhotonNetwork.IsConnected) //Phootnに接続されていなければ 34 { 35 SceneManager.LoadScene("MultiMode"); //ログイン画面に戻る 36 return; 37 } 38 namelavel.gameObject.SetActive(false); 39 namelavel2.gameObject.SetActive(false); 40 41 42 ok1.interactable = false; 43 ok2.interactable = false; 44 45 id = PhotonNetwork.LocalPlayer.ActorNumber; 46 47 roomHash = new ExitGames.Client.Photon.Hashtable(); 48 if (PhotonNetwork.LocalPlayer.CustomProperties["ready1"] is bool ready) 49 { 50 Debug.Log("ready" + ready); 51 roomHash.Add("ready1", ready); 52 } 53 if (PhotonNetwork.LocalPlayer.CustomProperties["ready2"] is bool ready2) 54 { 55 Debug.Log("ready2" + ready2); 56 roomHash.Add("ready2", ready2); 57 } 58 PhotonNetwork.LocalPlayer.SetCustomProperties(roomHash); 59 60 } 61 62 void Awake() 63 { 64 //ルーム内のクライアントがMasterClientと同じシーンをロードするように設定 65 PhotonNetwork.AutomaticallySyncScene = true; 66 } 67 68 69 70 void Update() 71 { 72 if(PhotonNetwork.PlayerList.Length >= 2) 73 { 74 namelavel.gameObject.SetActive(true); 75 namelavel2.gameObject.SetActive(true); 76 77 if (id == 1) 78 { 79 ok1.interactable = true; 80 } 81 if (id == 2) 82 { 83 ok2.interactable = true; 84 } 85 86 namelavel.text = PhotonNetwork.PlayerList[0].NickName; 87 namelavel2.text = PhotonNetwork.PlayerList[1].NickName; 88 } 89 90 Debug.Log("ready1 = " + roomHash["ready1"]); 91 Debug.Log("ready2 = " + roomHash["ready2"]); 92 93 if (PhotonNetwork.IsMasterClient && ready && ready2) 94 { 95 StartButton.gameObject.SetActive(true); 96 97 } 98 if (PhotonNetwork.IsMasterClient && PhotonNetwork.PlayerList.Length < 2) 99 { 100 StartButton.gameObject.SetActive(false); 101 } 102 103 } 104 public void ready1button() //準備完了ボタンを押したとき呼ばれる 105 { 106 if (ready == false) 107 { 108 ready = true; 109 roomHash["ready1"] = ready; 110 test1.text = "OK"; 111 } 112 else if (ready == true) 113 { 114 ready = false; 115 roomHash["ready1"] = ready; 116 test1.text = "NO"; 117 } 118 119 PhotonNetwork.LocalPlayer.SetCustomProperties(roomHash); 120 Debug.Log(ready); 121 Debug.Log("ready1 = " + roomHash["ready1"]); 122 } 123 public void ready2button() //準備完了ボタン2を押したとき呼ばれる 124 { 125 if (ready2 == false) 126 { 127 ready2 = true; 128 roomHash["ready2"] = ready2; 129 test2.text = "OK"; 130 } 131 else if (ready2 == true) 132 { 133 ready2 = false; 134 roomHash["ready2"] = ready2; 135 test2.text = "NO"; 136 } 137 138 PhotonNetwork.LocalPlayer.SetCustomProperties(roomHash); 139 Debug.Log(ready2); 140 Debug.Log("ready2 = " + roomHash["ready2"]); 141 } 142 public override void OnRoomPropertiesUpdate(ExitGames.Client.Photon.Hashtable propertiesThatChanged) 143 { 144 object value = null; 145 146 if (propertiesThatChanged.TryGetValue("ready1", out value)) 147 { 148 ready = (bool)value; 149 } 150 else if (propertiesThatChanged.TryGetValue("ready2", out value)) 151 { 152 ready2 = (bool)value; 153 } 154 } 155 156} 157
補足情報(FW/ツールのバージョンなど)
Unity 2019 4.11f1
あなたの回答
tips
プレビュー