photonを用いた対戦ゲームを作っております。
ゲーム内容としましては
一つのお題が出てそのお題について早押しで答える対戦ゲームです。
下記のように実装をし、マスタークライアントでのコルーチンを実施し、双方がお題をみた際に
タイマーが動き、その間に早押しで回答をするようにしているのですが、一つ目の関数である、turn1の反映もされないのが現状です。
アドバイスをいただけますと幸いです。
Enemy(まず、こちらの出題の方のスクリプト)
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.EventSystems; 6using Photon.Pun; 7using Photon.Realtime; 8using System; 9using System.Diagnostics; 10 11public class EnemyManagerOnline : MonoBehaviourPunCallbacks, EMInterface 12{ 13 14 public bool Oppsiteturnchange = false; 15 16 Coroutine mondaiCoroutine; 17 Coroutine mondaiCoroutine1; 18 Coroutine mondaiCoroutine2; 19 20 private PhotonView photonView; 21 22 public bool turn1 = false; 23 public bool turn2 = false; 24 public bool mondaichange = false; 25 public bool rivalReady1 = false; 26 27 28 29 30 31 void Start() 32 { 33 photonView = GetComponent<PhotonView>(); 34 35 if (PhotonNetwork.IsMasterClient) 36 { 37 mondaiCoroutine = StartCoroutine(Startmondai()); 38 } 39 } 40 41 void Update() 42 { 43 44 if (turn1) 45 { 46 47 if (PhotonNetwork.IsMasterClient) 48 { 49 mondaiCoroutine1 = StartCoroutine(Startmondai1()); 50 } 51 turn1 = false; 52 53 54 } 55 else if (turn2) 56 { 57 58 if (PhotonNetwork.IsMasterClient) 59 { 60 mondaiCoroutine2 = StartCoroutine(Startmondai2()); 61 62 } 63 turn2 = false; 64 65 66 } 67 else if (mondaichange) 68 { 69 70 mondaichange = false; 71 turn1 = true; 72 73 } 74 75 76 } 77 78 79 80 IEnumerator Startmondai() 81 { 82 //メソッドをここにも書いてます。RPGでの同期もothersで完了 83 photonView.RPC("mondaiStart", RpcTarget.IsMasterClient); 84 } 85 86 IEnumerator Startmondai1() 87 { 88 while (PlayerManagerOnline.alive) 89 { 90 //メソッドで問題を設定(RPCメソッドもターゲットをothersで設定し同期) 91 rivalReady1 = false; 92 93 //ここで双方に問題が表示されたかを判断 94 photonView.RPC("Ready", RpcTarget.others); 95 while (PhotonNetwork.IsConnected && !rivalReady1) 96 { 97 yield return new WaitForSeconds(0.1f); 98 continue; 99 } 100 101 } 102 103 } 104 IEnumerator Startmondai2() 105 { 106 107 while (PlayerManagerOnline.alive) 108 { 109 //メソッドを設定(RPCメソッドもターゲットをothersで設定) 110 mondaichange=true 111 } 112 113 } 114 115 [PunRPC] 116 private void mondaiStart() 117 { 118 turn1 = true; 119 } 120 121 122 123 124 [PunRPC] 125 private void Ready() 126 { 127 rivalReady1 = true; 128 photonView.RPC("RivalReady1", RpcTarget.MasterClient); 129 } 130 131 [PunRPC] 132 private void RivalReady1() 133 { 134 rivalReady1 = true; 135 } 136 137 138 139} 140 141
プレイヤー側のスクリプト
C#
1 2 3 4public class PlayerManagerOnline : MonoBehaviourPunCallbacks 5{ 6 7 public bool rivalReady = false; 8 public bool Ready = false 9 private PhotonView photonView; 10 11 12 13 14 15 void Start() 16 { 17 18 photonView = GetComponent<PhotonView>(); 19 } 20 21 22 void Update() 23 { 24 25 //どちらも問題をみたときに回答をさせる 26 if (enemyManager.rivalReady1) 27 { 28 if (PhotonNetwork.IsMasterClient) 29 { 30 31 //マスタークライアントに、ボタン表示のメソッドを書き、RPCメソッドでothersに表示 32 (countはカウントダウンが起こって同期するように設定がしてあります) 33 34 if (count < this.delatime) 35 { 36 37 //時間切れの際に発動 38 enemyManager.rivalReady1 = false; 39 enemyManager.turn2 = true; 40 41 } 42 //リストを先に埋めた方が勝ちになっておりそのメソッドは書いてあります 43 else if (stinglist.Count == enemyManager.stinglistAttack.Count) 44 { 45 enemyManager.rivalReady1 = false 46 enemyManager.turn2 = true; 47 48 49 50 } 51 //リストを先に埋めた方が勝ちになっておりそのメソッドは書いてあります 52 else if (stinglistRival.Count == enemyManager.stinglistAttack.Count) 53 { enemyManager.rivalReady1 = false; 54 enemyManager.turn2 = true; 55 56 } 57 } 58 59 60 61} 62
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/13 16:26
2020/07/13 16:44
2020/07/14 13:12
2020/07/21 14:16
2020/07/21 14:54