現在UnityPUN2でオンライン対戦ゲームを制作しています
そしてランダムマッチを実装しているところなのですが、対戦終了後のルームにも参加してしまうという問題にあっています
具体的に説明しますと、ランダムマッチは1vs1の2人で対戦します。
戦車を動かして弾を発射し、弾に当たるとその戦車を非アクティブにしてゲーム終了となります。
ゲームが終了する地”もどる”ボタンが表示され、押すとルームから退出できます。
ルームから1人だけ退出してそのルームの人数が1人だけになったとき
ランダムマッチ検索するとその1人だけになったルームに入れてしまいます
これを防ぎたいです。
試してみたことは
ゲーム開始時に(正確に言うと開始直前)
RoomOptions roomOptions = new RoomOptions();
roomOptions.IsVisible = false;
roomOptions.IsOpen = false;
下記がランダムマッチングに使用しているロビー作成or参加からゲーム画面に遷移するまでの全スクリプトです
Home画面(ここでランダムマッチを選択するとCLauncher2.csが呼ばれPhotonに接続する)
↓RandomBattleシーンに遷移
RandomBattleシーン(RandomBattle.csが呼ばれPhotonNetwork.JoinOrCreateRoomする)
↓OnJoinedRoomするとRandomLobbyシーンに遷移
RandomLobbyシーン(RandomLobby.csが呼ばれ参加者が集まるまで待機する,PhotonNetwork.PlayerList.Length == 2になったら
roomOptions.IsVisible = false; roomOptions.IsOpen = false;
にしてゲーム画面に遷移)
CLauncher2.cs
C#
1using UnityEngine; 2using UnityEngine.UI; 3using UnityEngine.SceneManagement; 4using Photon.Pun; 5using Photon.Realtime; 6 7public class CLauncher2 : MonoBehaviourPunCallbacks 8{ 9 #region Public変数定義 10 11 12 //Public変数の定義はココで 13 14 #endregion 15 16 #region Private変数 17 //Private変数の定義はココで 18 #endregion 19 20 #region Public Methods 21 //ログインボタンを押したときに実行される 22 public void Connect() 23 { 24 //Photonに接続できていなければ 25 if (!PhotonNetwork.IsConnected) 26 { 27 PhotonNetwork.ConnectUsingSettings(); //Photonに接続する 28 Debug.Log("Photonに接続しました。"); 29 if (string.IsNullOrEmpty(PhotonNetwork.NickName)) 30 { 31 PhotonNetwork.NickName = "player" + Random.Range(1, 99999); 32 } 33 PhotonNetwork.LoadLevel("RandomBattle"); 34 } 35 else 36 { 37 //PhotonNetwork.ConnectUsingSettings(); 38 Debug.Log("Photonに接続しました2"); 39 PhotonNetwork.LoadLevel("RandomBattle"); 40 } 41 } 42 43 44 45 #endregion 46 47 void OnGUI() 48 { 49 //ログインの状態を画面上に出力 50 GUILayout.Label(PhotonNetwork.NetworkClientState.ToString()); 51 } 52 53}
RandomBattle.cs
C#
1using UnityEngine; 2using UnityEngine.UI; 3using UnityEngine.SceneManagement; 4using Photon.Pun; 5using Photon.Realtime; 6public class RandomBattle : MonoBehaviourPunCallbacks 7{ 8 private void Start() 9 { 10 // PhotonServerSettingsに設定した内容を使ってマスターサーバーへ接続する 11 PhotonNetwork.ConnectUsingSettings(); 12 } 13 14 // マスターサーバーへの接続が成功した時に呼ばれるコールバック 15 public override void OnConnectedToMaster() 16 { 17 Debug.Log("接続Master"); 18 19 RoomOptions roomOptions = new RoomOptions(); 20 roomOptions.IsVisible = true; //ロビーで見える部屋にする 21 roomOptions.IsOpen = true; //他のプレイヤーの入室を許可する 22 roomOptions.MaxPlayers = 2; //入室可能人数を設定 23 24 // "room"という名前のルームに参加する(ルームが無ければ作成してから参加する) 25 PhotonNetwork.JoinOrCreateRoom("room", roomOptions, TypedLobby.Default); 26 27 } 28 29 30 // マッチングが成功した時に呼ばれるコールバック 31 public override void OnJoinedRoom() 32 { 33 //SceneManager.LoadSceneAsync("RandomLobby", LoadSceneMode.Single); 34 PhotonNetwork.LoadLevel("RandomLobby"); 35 } 36 37}
RandomLobby.cs
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6using Photon.Pun; 7using Photon.Realtime; 8 9public class RandomLobbyUI : MonoBehaviourPun 10{ 11 bool go = true; 12 private float step_time; 13 14 // Start is called before the first frame update 15 void Start() 16 { 17 if (!PhotonNetwork.IsConnected) //Phootnに接続されていなければ 18 { 19 SceneManager.LoadScene("MultiMode"); //ログイン画面に戻る 20 return; 21 } 22 23 PhotonNetwork.AutomaticallySyncScene = true; 24 go = true; 25 Debug.Log("PhotonNetwork.PlayerList.Length = " + PhotonNetwork.PlayerList.Length); 26 step_time = 0.0f; 27 28 } 29 30 // Update is called once per frame 31 void Update() 32 { 33 if (PhotonNetwork.IsMasterClient) 34 { 35 //Debug.Log("自分はマスター"); 36 37 38 if (go && PhotonNetwork.PlayerList.Length >= 2) 39 { 40 RoomOptions roomOptions = new RoomOptions(); 41 roomOptions.IsVisible = false; 42 roomOptions.IsOpen = false; 43 44 Debug.Log("roomOptions.IsVisible = " + roomOptions.IsVisible); 45 Debug.Log("roomOptions.IsOpen = " + roomOptions.IsOpen); 46 47 Debug.Log("PhotonNetwork.PlayerList.Length = " + PhotonNetwork.PlayerList.Length); 48 Debug.Log("2名参加ゲーム開始"); 49 50 step_time += Time.deltaTime; 51 if (step_time >= 3.0f) 52 { 53 PhotonNetwork.LoadLevel("RandomB"); 54 go = false; 55 } 56 57 } 58 else 59 { 60 Debug.Log("ゲーム開始できません"); 61 } 62 } 63 64 } 65 66 67} 68
ですが試してみたところ失敗でゲーム終了後の1人だけになったルームに入れてしまいました。
どうかアドバイスの方よろしくお願いします・・・
あなたの回答
tips
プレビュー