teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

ソースコードの記載

2020/12/12 16:02

投稿

Jejeje
Jejeje

スコア38

title CHANGED
@@ -1,1 +1,1 @@
1
- PUN2 ルームに入れないようにしたい
1
+ PUN2 ゲーム開始後にルームに入れないようにしたい
body CHANGED
@@ -17,9 +17,153 @@
17
17
  roomOptions.IsVisible = false;
18
18
  roomOptions.IsOpen = false;
19
19
 
20
+
21
+ 下記がランダムマッチングに使用しているロビー作成or参加からゲーム画面に遷移するまでの全スクリプトです
22
+
23
+ Home画面(ここでランダムマッチを選択すると**CLauncher2.cs**が呼ばれPhotonに接続する)
24
+
25
+ ↓RandomBattleシーンに遷移
26
+
27
+ RandomBattleシーン(**RandomBattle.cs**が呼ばれPhotonNetwork.JoinOrCreateRoomする)
28
+
29
+ ↓OnJoinedRoomするとRandomLobbyシーンに遷移
30
+
31
+ RandomLobbyシーン(**RandomLobby.cs**が呼ばれ参加者が集まるまで待機する,PhotonNetwork.PlayerList.Length == 2になったら
32
+ roomOptions.IsVisible = false; roomOptions.IsOpen = false;
33
+ にしてゲーム画面に遷移)
34
+
35
+
36
+ ### CLauncher2.cs
20
37
  ```C#
38
+ using UnityEngine;
39
+ using UnityEngine.UI;
40
+ using UnityEngine.SceneManagement;
41
+ using Photon.Pun;
42
+ using Photon.Realtime;
43
+
44
+ public class CLauncher2 : MonoBehaviourPunCallbacks
45
+ {
46
+ #region Public変数定義
47
+
48
+
49
+ //Public変数の定義はココで
50
+
51
+ #endregion
52
+
21
- void Update()
53
+ #region Private変数
54
+ //Private変数の定義はココで
55
+ #endregion
56
+
57
+ #region Public Methods
58
+ //ログインボタンを押したときに実行される
59
+ public void Connect()
22
60
  {
61
+ //Photonに接続できていなければ
62
+ if (!PhotonNetwork.IsConnected)
63
+ {
64
+ PhotonNetwork.ConnectUsingSettings(); //Photonに接続する
65
+ Debug.Log("Photonに接続しました。");
66
+ if (string.IsNullOrEmpty(PhotonNetwork.NickName))
67
+ {
68
+ PhotonNetwork.NickName = "player" + Random.Range(1, 99999);
69
+ }
70
+ PhotonNetwork.LoadLevel("RandomBattle");
71
+ }
72
+ else
73
+ {
74
+ //PhotonNetwork.ConnectUsingSettings();
75
+ Debug.Log("Photonに接続しました2");
76
+ PhotonNetwork.LoadLevel("RandomBattle");
77
+ }
78
+ }
79
+
80
+
81
+
82
+ #endregion
83
+
84
+ void OnGUI()
85
+ {
86
+ //ログインの状態を画面上に出力
87
+ GUILayout.Label(PhotonNetwork.NetworkClientState.ToString());
88
+ }
89
+
90
+ }
91
+ ```
92
+
93
+ ### RandomBattle.cs
94
+ ```C#
95
+ using UnityEngine;
96
+ using UnityEngine.UI;
97
+ using UnityEngine.SceneManagement;
98
+ using Photon.Pun;
99
+ using Photon.Realtime;
100
+ public class RandomBattle : MonoBehaviourPunCallbacks
101
+ {
102
+ private void Start()
103
+ {
104
+ // PhotonServerSettingsに設定した内容を使ってマスターサーバーへ接続する
105
+ PhotonNetwork.ConnectUsingSettings();
106
+ }
107
+
108
+ // マスターサーバーへの接続が成功した時に呼ばれるコールバック
109
+ public override void OnConnectedToMaster()
110
+ {
111
+ Debug.Log("接続Master");
112
+
113
+ RoomOptions roomOptions = new RoomOptions();
114
+ roomOptions.IsVisible = true; //ロビーで見える部屋にする
115
+ roomOptions.IsOpen = true; //他のプレイヤーの入室を許可する
116
+ roomOptions.MaxPlayers = 2; //入室可能人数を設定
117
+
118
+ // "room"という名前のルームに参加する(ルームが無ければ作成してから参加する)
119
+ PhotonNetwork.JoinOrCreateRoom("room", roomOptions, TypedLobby.Default);
120
+
121
+ }
122
+
123
+
124
+ // マッチングが成功した時に呼ばれるコールバック
125
+ public override void OnJoinedRoom()
126
+ {
127
+ //SceneManager.LoadSceneAsync("RandomLobby", LoadSceneMode.Single);
128
+ PhotonNetwork.LoadLevel("RandomLobby");
129
+ }
130
+
131
+ }
132
+ ```
133
+ ### RandomLobby.cs
134
+ ```C#
135
+ using System.Collections;
136
+ using System.Collections.Generic;
137
+ using UnityEngine;
138
+ using UnityEngine.UI;
139
+ using UnityEngine.SceneManagement;
140
+ using Photon.Pun;
141
+ using Photon.Realtime;
142
+
143
+ public class RandomLobbyUI : MonoBehaviourPun
144
+ {
145
+ bool go = true;
146
+ private float step_time;
147
+
148
+ // Start is called before the first frame update
149
+ void Start()
150
+ {
151
+ if (!PhotonNetwork.IsConnected) //Phootnに接続されていなければ
152
+ {
153
+ SceneManager.LoadScene("MultiMode"); //ログイン画面に戻る
154
+ return;
155
+ }
156
+
157
+ PhotonNetwork.AutomaticallySyncScene = true;
158
+ go = true;
159
+ Debug.Log("PhotonNetwork.PlayerList.Length = " + PhotonNetwork.PlayerList.Length);
160
+ step_time = 0.0f;
161
+
162
+ }
163
+
164
+ // Update is called once per frame
165
+ void Update()
166
+ {
23
167
  if (PhotonNetwork.IsMasterClient)
24
168
  {
25
169
  //Debug.Log("自分はマスター");
@@ -33,9 +177,17 @@
33
177
 
34
178
  Debug.Log("roomOptions.IsVisible = " + roomOptions.IsVisible);
35
179
  Debug.Log("roomOptions.IsOpen = " + roomOptions.IsOpen);
180
+
36
-
181
+ Debug.Log("PhotonNetwork.PlayerList.Length = " + PhotonNetwork.PlayerList.Length);
182
+ Debug.Log("2名参加ゲーム開始");
183
+
184
+ step_time += Time.deltaTime;
185
+ if (step_time >= 3.0f)
186
+ {
37
- PhotonNetwork.LoadLevel("RandomB");
187
+ PhotonNetwork.LoadLevel("RandomB");
38
- go = false;
188
+ go = false;
189
+ }
190
+
39
191
  }
40
192
  else
41
193
  {
@@ -44,10 +196,15 @@
44
196
  }
45
197
 
46
198
  }
199
+
200
+
201
+ }
202
+
47
203
  ```
48
204
 
49
- とルームオプションを上書きし、ルームに入れなくしています
50
205
 
206
+
207
+
51
208
  ですが試してみたところ失敗でゲーム終了後の1人だけになったルームに入れてしまいました。
52
209
 
53
210
  どうかアドバイスの方よろしくお願いします・・・

1

ソースコードの記載

2020/12/12 16:01

投稿

Jejeje
Jejeje

スコア38

title CHANGED
File without changes
body CHANGED
@@ -17,6 +17,35 @@
17
17
  roomOptions.IsVisible = false;
18
18
  roomOptions.IsOpen = false;
19
19
 
20
+ ```C#
21
+ void Update()
22
+ {
23
+ if (PhotonNetwork.IsMasterClient)
24
+ {
25
+ //Debug.Log("自分はマスター");
26
+
27
+
28
+ if (go && PhotonNetwork.PlayerList.Length >= 2)
29
+ {
30
+ RoomOptions roomOptions = new RoomOptions();
31
+ roomOptions.IsVisible = false;
32
+ roomOptions.IsOpen = false;
33
+
34
+ Debug.Log("roomOptions.IsVisible = " + roomOptions.IsVisible);
35
+ Debug.Log("roomOptions.IsOpen = " + roomOptions.IsOpen);
36
+
37
+ PhotonNetwork.LoadLevel("RandomB");
38
+ go = false;
39
+ }
40
+ else
41
+ {
42
+ Debug.Log("ゲーム開始できません");
43
+ }
44
+ }
45
+
46
+ }
47
+ ```
48
+
20
49
  とルームオプションを上書きし、ルームに入れなくしています
21
50
 
22
51
  ですが試してみたところ失敗でゲーム終了後の1人だけになったルームに入れてしまいました。