PUN2のPunTurnManagerを使って、ターン制のゲームを作成しています。
現在、下記のコードでテストしておりターンが始まった時の処理を実装しようと考えています。
簡単な流れは
「ルームに2人目が入室」
→「ターンが開始」
→「ボタンをクリックで自分のターン終了」 or 「10秒経過で互いのターンが終了」
→「次のターンが開始」
となっています。
C#
1using Photon.Pun; 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using Photon.Realtime; 6using Photon.Pun.UtilityScripts; 7 8public class Turn : MonoBehaviourPunCallbacks, IPunTurnManagerCallbacks 9{ 10 private PunTurnManager turnManager; 11 12 void Start() 13 { 14 //マスターサーバーへ接続 15 PhotonNetwork.ConnectUsingSettings(); 16 } 17 18 public override void OnConnectedToMaster() 19 { 20 //Roomという名前のルームを作成する、既存の場合は参加する 21 PhotonNetwork.JoinOrCreateRoom("Room", RoomOPS, TypedLobby.Default); 22 23 } 24 public override void OnJoinedRoom() 25 { 26 27 //ルーム参加時、ルーム人数の上限ならゲーム開始 28 if (PhotonNetwork.CurrentRoom.PlayerCount == PhotonNetwork.CurrentRoom.MaxPlayers) 29 { 30 Debug.Log("人数が揃いました"); 31 photonView.RPC(nameof(GameStart), RpcTarget.All); 32 } 33 } 34 35 static RoomOptions RoomOPS = new RoomOptions() 36 { 37 MaxPlayers = 2, 38 IsOpen = true, //部屋に参加できるか 39 }; 40 41 42 [PunRPC] 43 void GameStart() 44 { 45 if (PhotonNetwork.IsMasterClient) 46 { 47 Debug.Log("私がマスター"); 48 this.turnManager.BeginTurn();//turnmanagerに新しいターンを始めさせる 49 } 50 } 51 52 public void Awake() 53 { 54 this.turnManager = this.gameObject.AddComponent<PunTurnManager>(); 55 this.turnManager.TurnManagerListener = this; 56 this.turnManager.TurnDuration = 10f; 57 } 58 59 public void OnPlayerFinished(Player photonPlayer, int turn, object move) 60 { 61 } 62 public void OnPlayerMove(Player photonPlayer, int turn, object move) 63 { 64 } 65 public void OnTurnBegins(int turn)//3 ターンが開始した場合 66 { 67 Debug.Log("今、" + turn + "ターン目が開始しました"); 68 } 69 public void OnTurnCompleted(int obj)//4ターン終了時に呼ばれるメソッド 70 { 71 Debug.Log("ターン終了時処理"); 72 this.turnManager.BeginTurn(); 73 } 74 public void OnTurnTimeEnds(int turn)//5 タイマーが終了した場合 75 { 76 Debug.Log("時間切れ"); 77 this.turnManager.BeginTurn(); 78 } 79 public void OnClickButton()//ボタンをクリックで自分のターン終了 80 { 81 Debug.Log("ボタンクリック"); 82 this.turnManager.SendMove(1, true); 83 } 84} 85
そこで、OnTurnBegins
の中にターン開始時処理を書こうと思ったのですが
10秒経過でターンが切り替わるときに限り、何度もOnTurnBegins
とOnTurnTimeEnds
が呼ばれているようです。
以下が、そのログです。
これではターン開始時の処理が何度も動いてしまうので困っています。
原因もしくは対策がわかる方がいたら教えてください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/23 10:47