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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

1158閲覧

【Unity】Photonで、二回目以降のゲームスタート時にマッチング処理ができず困っています

kosho206

総合スコア41

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2020/07/25 09:20

編集2020/07/25 09:30

https://connect.unity.com/p/pun2deshi-meruonraingemukai-fa-ru-men-sono1
こちらのサイトを参考にして、photonを使ったネット対戦のゲームを作っています。

マッチングの処理には、サイトのものをコピペして以下のコードを使っているのですが、ここで1つ問題が発生しました。

using Photon.Pun; using Photon.Realtime; using UnityEngine; // MonoBehaviourではなくMonoBehaviourPunCallbacksを継承して、Photonのコールバックを受け取れるようにする public class SampleScene : MonoBehaviourPunCallbacks { private GameObject Unkoman; private void Start() { // PhotonServerSettingsに設定した内容を使ってマスターサーバーへ接続する PhotonNetwork.ConnectUsingSettings(); } // マスターサーバーへの接続が成功した時に呼ばれるコールバック public override void OnConnectedToMaster() { // "room"という名前のルームに参加する(ルームが無ければ作成してから参加する) PhotonNetwork.JoinOrCreateRoom("room", new RoomOptions(), TypedLobby.Default); Debug.Log("bb"); } // マッチングが成功した時に呼ばれるコールバック public override void OnJoinedRoom() { // マッチング後、ランダムな位置に自分自身のネットワークオブジェクトを生成する var StartPos = new Vector3(Random.Range(-10f, 10f), 4f, Random.Range(-10f, 10f)); Unkoman = PhotonNetwork.Instantiate("UnkomanEmpty", StartPos, Quaternion.identity); PhotonNetwork.Instantiate("UnkomanCamera", Unkoman.transform.position, Quaternion.identity); Debug.Log("aa"); } }

ゲームでは、スタート画面のシーンとバトル画面のシーンに分かれていて、スタート画面の「Play」というボタンを押すとバトルシーンに遷移してゲームが始まるようになっています。
ここで発生した問題というのは、ゲームを実行してから二回目は「Play」ボタンをクリックしてもネットワークオブジェクトのインスタンス化がされない。というものです。

ゲームを実行し、Start画面のPlayボタンを押すと、一回目はしっかりバトルシーンに遷移し、問題なくゲームが始まります。
ですが、バトルが終わりスタート画面に戻ってからもう一度Playボタンを押すと、プレイヤーのネットワークオブジェクトが生成されず、ゲームが始まりません。

Debug.Logで確認すると、二回目以降にPlayボタンを押した時はコード内2つのログが動いていないことがわかりました。

おそらくこの原因は、一回目のPlayを押したときにマッチング処理が完了したので、その後もう一度Playを押しても既にマッチングが終わった状態で新しくマッチングがされないことだと思います。
なので、バトルが終了してスタート画面に戻るときにマッチングの情報をリセットすれば、この問題は解決すると思うのですが、そのやり方がわかりません。

マッチング情報のリセット的な処理ができるコードを、どなたか教えてください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

PhotonNetwork.LeaveRoom() で部屋から出ればよいと思います。

投稿2020/07/25 09:31

bboydaisuke

総合スコア5275

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

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

kosho206

2020/07/26 01:11

ありがとうございます。 バトルシーンから出たタイミングでルームから出たかったので、試しに void OnSceneUnloaded(Scene scene) { static bool LeaveRoom(bool becomeInactive = true { } } と書いてみましたがうまくいきませんでした。 具体的な書式を教えてくださいませんか?
kosho206

2020/07/26 06:14

すみません。 このコメントをする前に void OnSceneUnloaded(Scene scene) { PhotonNetwork.LeaveRoom; } という書式も試したのですが、最後に()をつけ忘れていたことがわかりました。 僕の凡ミスでした。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問