photonを用いた対戦ゲームを作っております。
ゲーム内容としましては
一つのお題が出てそのお題について早押しで答える対戦ゲームです。
早押しでのカウントダウンにて0.1〜0,2程度のタイムラグが生じ、双方の変数の同期がされていない問題が生じております。
こちらアドバイスをいただけますと幸いです。
タイマー(双方のリストが埋まるまでカウントダウン)
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.EventSystems; 6using System; 7using UnityEngine.SceneManagement; 8using Photon.Pun; 9using Photon.Realtime; 10using System.Collections.Specialized; 11using System.Diagnostics; 12 13public class TimeScript : MonoBehaviour, Photon.Pun.IPunObservable 14{ 15 [SerializeField] 16 PlayerManagerOnline playerManager; 17 18 [SerializeField] 19 EnemyManagerOnline enemyManager; 20 21 public PhotonView photonview; 22 23 // Start is called before the first frame update 24 void Start() 25 { 26 photonview = GetComponent<PhotonView>(); 27 } 28 29 // Update is called once per frame 30 void Update() 31 { 32 if (enemyManager.FinTurn) 33 { 34 //双方の回答が終わる(どちらのリストがはじめに提示したリストと同数に埋まるまでカウントダウン) 35 if (playerManager.stinglist.Count != enemyManager.stinglistAttack.Count || playerManager.stinglistRival.Count != enemyManager.stinglistAttack.Count) 36 { 37 38 playerManager.Timer.value -= Time.deltaTime; 39 40 41 } 42 } 43 44 } 45 46 47 48 public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) 49 { 50 if (stream.IsWriting) 51 { 52 stream.SendNext(playerManager.Timer.value); 53 stream.SendNext(playerManager.time1); 54 stream.SendNext(playerManager.sum); 55 } 56 else 57 { 58 playerManager.Timer.value = (float)stream.ReceiveNext(); 59 playerManager.time1 = (float)stream.ReceiveNext(); 60 playerManager.sum = (float)stream.ReceiveNext(); 61 62 } 63 } 64 65} 66
プレイヤー(回答のスクリプト)
C#
1void Update() 2 { 3 4 5 if (enemyManager.FinTurn) 6 { 7 8 9 if (Timer.value == 0) 10 { 11 12 enemyManager.FinTurn = false; 13 enemyManager.Oppsiteturn2 = true; 14 15 } 16 17 18 //自分の回答スクリプト 19 20 else if (stinglist.Count == enemyManager.stinglistAttack.Count&&!losing) 21 { 22 23 if (stinglistRival.Count == enemyManager.stinglistAttack.Count) 24 { 25 26 27 28 enemyManager.FinTurn = false; 29 30 31 } 32 33 } 34 //対戦相手のスクリプト 35 else if (stinglistRival.Count == enemyManager.stinglistAttack.Count) 36 { 37 38 39 losing = true; 40 41 if (stinglist.Count == enemyManager.stinglistAttack.Count&&losing) 42 { 43 44 enemyManager.FinTurn = false; 45 losing = false; 46 47 48 } 49 50 } 51 52 53 } 54 55 56 public void OnbuttonKaitou() 57 { 58 59 stinglist.Add("a"); 60 if (stinglist.Count == enemyManager.stinglistAttack.Count) 61 { 62 //自分の画面に回答ボタンを押すまでにかかった時間を表示 63 time1 = Timer.value; 64 sum = Timer.maxValue - time1; 65 TimeMe.text = sum.ToString("f2"); 66 67 //相手の画面に回答ボタンを押すまでにかかった時間を表示 68 photonView.RPC("Time1RPC", RpcTarget.Others); 69 70 71 } 72 73 74 } 75 76 77 [PunRPC] 78 private void Time1RPC() 79 { 80//ここのtime1とTimer.valueとsumに少々の誤差が生じている。 81 82 time1 = Timer.value; 83 sum = Timer.maxValue - time1; 84 TimeRival.text = sum.ToString("f2"); 85 86 } 87
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/22 04:43 編集
2020/07/22 16:23
2020/07/23 01:05