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

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

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

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

解決済

PUN2のPunTurnManagerを使ってターン開始時の処理を実装したい

shio01
shio01

総合スコア1

Photon Cloud

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

2回答

0評価

0クリップ

649閲覧

投稿2022/02/23 08:17

PUN2のPunTurnManagerを使って、ターン制のゲームを作成しています。
現在、下記のコードでテストしておりターンが始まった時の処理を実装しようと考えています。

簡単な流れは
「ルームに2人目が入室」
→「ターンが開始」
→「ボタンをクリックで自分のターン終了」 or 「10秒経過で互いのターンが終了」
→「次のターンが開始」
となっています。

C#

using Photon.Pun; using System.Collections; using System.Collections.Generic; using UnityEngine; using Photon.Realtime; using Photon.Pun.UtilityScripts; public class Turn : MonoBehaviourPunCallbacks, IPunTurnManagerCallbacks { private PunTurnManager turnManager; void Start() { //マスターサーバーへ接続 PhotonNetwork.ConnectUsingSettings(); } public override void OnConnectedToMaster() { //Roomという名前のルームを作成する、既存の場合は参加する PhotonNetwork.JoinOrCreateRoom("Room", RoomOPS, TypedLobby.Default); } public override void OnJoinedRoom() { //ルーム参加時、ルーム人数の上限ならゲーム開始 if (PhotonNetwork.CurrentRoom.PlayerCount == PhotonNetwork.CurrentRoom.MaxPlayers) { Debug.Log("人数が揃いました"); photonView.RPC(nameof(GameStart), RpcTarget.All); } } static RoomOptions RoomOPS = new RoomOptions() { MaxPlayers = 2, IsOpen = true, //部屋に参加できるか }; [PunRPC] void GameStart() { if (PhotonNetwork.IsMasterClient) { Debug.Log("私がマスター"); this.turnManager.BeginTurn();//turnmanagerに新しいターンを始めさせる } } public void Awake() { this.turnManager = this.gameObject.AddComponent<PunTurnManager>(); this.turnManager.TurnManagerListener = this; this.turnManager.TurnDuration = 10f; } public void OnPlayerFinished(Player photonPlayer, int turn, object move) { } public void OnPlayerMove(Player photonPlayer, int turn, object move) { } public void OnTurnBegins(int turn)//3 ターンが開始した場合 { Debug.Log("今、" + turn + "ターン目が開始しました"); } public void OnTurnCompleted(int obj)//4ターン終了時に呼ばれるメソッド { Debug.Log("ターン終了時処理"); this.turnManager.BeginTurn(); } public void OnTurnTimeEnds(int turn)//5 タイマーが終了した場合 { Debug.Log("時間切れ"); this.turnManager.BeginTurn(); } public void OnClickButton()//ボタンをクリックで自分のターン終了 { Debug.Log("ボタンクリック"); this.turnManager.SendMove(1, true); } }

そこで、OnTurnBeginsの中にターン開始時処理を書こうと思ったのですが
10秒経過でターンが切り替わるときに限り、何度もOnTurnBeginsOnTurnTimeEndsが呼ばれているようです。
以下が、そのログです。イメージ説明

これではターン開始時の処理が何度も動いてしまうので困っています。
原因もしくは対策がわかる方がいたら教えてください。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Photon Cloud

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。