質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Photon Cloud

Photon Cloudは、オンラインゲーム開発向けネットワークエンジン。リアルタイムマルチプレイ通信のプラットフォームであるPhotonの一つです。ネットワーク通信によるオンラインゲームを開発・運営するために必要なツールがサーバー環境に構築されています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

1315閲覧

PUN2 bool変数の同期方法 Unity

Jejeje

総合スコア38

Photon Cloud

Photon Cloudは、オンラインゲーム開発向けネットワークエンジン。リアルタイムマルチプレイ通信のプラットフォームであるPhotonの一つです。ネットワーク通信によるオンラインゲームを開発・運営するために必要なツールがサーバー環境に構築されています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/12/28 14:57

実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問