/** * ルーム作成&入室設定. */ private void OnGUI_CreateAndJoinRoom() { // 任意の名称を持つルームを作成する if (GUILayout.Button("Create Room", GUILayout.Width(150))) { // カスタムルームパラメータから、ロビー送信パラメータを抽出(とりあえず全部送信するようにする) string[] customRoomParametersForLobby = new string[this.customRoomParam.Keys.Count]; int keyIndex = 0; foreach (string key in this.customRoomParam.Keys) { customRoomParametersForLobby[keyIndex] = key; keyIndex++; } RoomSettings roomSettings = new RoomSettings() { isVisible = this.isVisible, isOpen = true, maxPlayers = this.maxPlayers, roomParameters = this.customRoomParam, lobbyParameters = customRoomParametersForLobby }; MonobitNetwork.CreateRoom(null, roomSettings, null); } // カスタムルームパラメータと一致するランダム入室 if (GUILayout.Button("Join Room", GUILayout.Width(150))) { MonobitNetwork.JoinRandomRoom(this.customRoomParam, 0); } }
/** * ルーム退室時の処理. */ public void OnLeftRoom() { Debug.Log("OnLeftRoom"); this.isGameStart = false; this.isSpawnMyChara = false; this.battleEndFrame = 60 * 60; if (isEnterAnotherRoom) { isEnterAnotherRoom = false; // 自身の値に対し、検索範囲の最初の閾値を設定する baseValueMin = (baseValue - baseValueIncrease < baseValueLow) ? baseValueLow : baseValue - baseValueIncrease; baseValueMax = (baseValue + baseValueIncrease > baseValueHigh) ? baseValueHigh : baseValue + baseValueIncrease; // 閾値から、クエリー検索のためのWHERE句を生成する string queryLobbyFilter = "Value>=" + baseValueMin + " AND Value<=" + baseValueMax; // ルームへの入室 MonobitNetwork.JoinRandomRoom(null, this.maxPlayers, Definitions.MatchmakingMode.SerialMatching, new LobbyInfo() { Kind = LobbyKind.Query, Name = "QueryLobby" }, queryLobbyFilter); } }
/** * ルーム入室設定. */ private void OnGUI_JoinRoom() { // 表題 GUILayout.Label("Join Room", new GUIStyle() { normal = new GUIStyleState() { textColor = Color.white }, fontStyle = FontStyle.Bold }); GUILayout.BeginHorizontal(); GUILayout.Space(25); GUILayout.BeginVertical(); // クエリー文の入力 GUILayout.BeginHorizontal(); GUILayout.Label("Key Values : "); this.keyValueFilter = GUILayout.TextField(this.keyValueFilter, GUILayout.Width(400)); GUILayout.EndHorizontal(); // カスタムルームパラメータと一致するランダム入室 if (GUILayout.Button("Join Room", GUILayout.Width(150))) { MonobitNetwork.JoinRandomRoom(null, this.maxPlayers, Definitions.MatchmakingMode.SerialMatching, new LobbyInfo() { Kind = LobbyKind.Query, Name = "QueryLobby" }, this.keyValueFilter); } GUILayout.EndVertical(); GUILayout.EndHorizontal(); }
// GUIまわりの記述 public void OnGUI() { // GUI用の解像度を調整する Vector2 guiScreenSize = new Vector2(800, 480); if (Screen.width > Screen.height) { // landscape GUIUtility.ScaleAroundPivot(new Vector2(Screen.width / guiScreenSize.x, Screen.height / guiScreenSize.y), Vector2.zero); } else { // portrait GUIUtility.ScaleAroundPivot(new Vector2(Screen.width / guiScreenSize.y, Screen.height / guiScreenSize.x), Vector2.zero); } if (MonobitNetwork.isConnect) { // ルーム一覧を取得 m_RoomData = MonobitNetwork.GetRoomData(); // ルーム一覧からボタン選択 if (m_RoomData != null) { for (int i = 0; i < m_RoomData.Length; i++) { if (GUILayout.Button(m_RoomData[i].name + "(" + m_RoomData[i].playerCount + ")", GUILayout.Width(100))) { MonobitNetwork.JoinRoom(m_RoomData[i].name); } } } // ルーム名の入力 this.roomName = GUILayout.TextField(this.roomName); // ルームの作成 if (GUILayout.Button("Create Room", GUILayout.Width(100))) { MonobitNetwork.CreateRoom(this.roomName, new RoomSettings() { isVisible = true, isOpen = true, maxPlayers = this.maxPlayers }, null); } // ルームへの入室(ランダム) if (GUILayout.Button("Join Room", GUILayout.Width(100))) { MonobitNetwork.JoinRandomRoom(); } // メニューに戻る if (GUILayout.Button("Return Menu", GUILayout.Width(100))) { Application.LoadLevel("SampleMenu"); } } }
/** * ランダム入室失敗時の処理. */ public void OnMonobitRandomJoinFailed(object[] parameters) { // すでにルーム入室に成功している場合、連続して処理をしないようにする if ((Int16)mun.STREAM.ERRORCODE_ID.RESULT_FAILURE_MASTER_ALREADY_JOINED_ROOM == (Int16)parameters[0]) { return; } // 閾値が限界まで達してしまった場合、または baseValueIncreaseが0以下の場合、 // そもそもルームが存在しなかった(あるいは検索中に消えた、検索対象がなくなった)ことになるので、エラーで抜ける。 if (baseValueIncrease <= 0 || (baseValueMin == baseValueLow && this.baseValueMax == baseValueHigh)) { Debug.Log("OnMonobitRandomJoinFailed : ErrorCode = " + parameters[0] + ", DebugMsg = " + parameters[1]); return; } // ランダムルーム入室のクエリー検索の閾値を広げる。 if (Mathf.Abs(baseValueMax - baseValue) <= Math.Abs(baseValueMin - baseValue)) { if ((baseValueMax + baseValueIncrease) > baseValueHigh) { baseValueMax = baseValueHigh; baseValueMin = Mathf.Max(baseValueMin - baseValueIncrease, baseValueLow); } else { baseValueMax += baseValueIncrease; } } else { if ((baseValueMin - baseValueIncrease) < baseValueLow) { baseValueMin = baseValueLow; baseValueMax = Mathf.Min(baseValueMax + baseValueIncrease, baseValueHigh); } else { baseValueMin -= baseValueIncrease; } } // 閾値から、クエリー検索のためのWHERE句を生成する string queryLobbyFilter = "Value>=" + baseValueMin + " AND Value<=" + baseValueMax; // ルームへの入室 MonobitNetwork.JoinRandomRoom(null, this.maxPlayers, Definitions.MatchmakingMode.SerialMatching, new LobbyInfo() { Kind = LobbyKind.Query, Name = "QueryLobby" }, queryLobbyFilter); }
/** * ランダム入室失敗時の処理. */ public void OnMonobitRandomJoinFailed(object[] parameters) { // 閾値が限界まで達してしまった場合、そもそもルームが存在しなかった(あるいは検索中に消えた)ことになるので、エラーで抜ける。 if (baseValueMin == baseValueLow && this.baseValueMax == baseValueHigh) { Debug.Log("OnMonobitRandomJoinFailed : ErrorCode = " + parameters[0] + ", DebugMsg = " + parameters[1]); return; } // ランダムルーム入室のクエリー検索の閾値を広げる。 if (Mathf.Abs(baseValueMax - baseValue) <= Math.Abs(baseValueMin - baseValue)) { if ((baseValueMax + baseValueIncrease) > baseValueHigh) { baseValueMax = baseValueHigh; baseValueMin = Mathf.Max(baseValueMin - baseValueIncrease, baseValueLow); } else { baseValueMax += baseValueIncrease; } } else { if ((baseValueMin - baseValueIncrease) < baseValueLow) { baseValueMin = 0; baseValueMax = Mathf.Min(baseValueMax + baseValueIncrease, baseValueHigh); } else { baseValueMin -= baseValueIncrease; } } // 閾値から、クエリー検索のためのWHERE句を生成する string queryLobbyFilter = "Value>=" + baseValueMin + " AND Value<=" + baseValueMax; // ルームへの入室 MonobitNetwork.JoinRandomRoom(null, this.maxPlayers, Definitions.MatchmakingMode.SerialMatching, new LobbyInfo() { Kind = LobbyKind.Query, Name = "QueryLobby" }, queryLobbyFilter); }
/** * @brief オンライン&ロビー入室中のGUI表示. * @param isDispInputGUI 入力系GUIを表示するかどうかのフラグ(縁取り文字描画機能を活かした場合の、多重描画を防止するため). * @param state 文字表示色. */ private void OnGUI_InLobby(bool isDispInputGUI, GUIStyleState state) { // ルーム作成GUIレイヤー { // Header GUILayout.Label("Create Room/Join Random", new GUIStyle() { normal = state, fontSize = 18 }); GUILayout.BeginHorizontal(); GUILayout.Space(25); GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); { // ルーム名の入力欄、および作成ボタン入力表示 GUILayout.Label("Input room name:", new GUIStyle() { normal = state, fontSize = 16, margin = new RectOffset(6, 6, 6, 6), fixedWidth = 140 }); if (isDispInputGUI) { this.roomName = GUILayout.TextField(this.roomName, GUILayout.Width(200)); if (GUILayout.Button("Create Room", GUILayout.Width(150))) { // 入力があった場合、指定された名前で4人部屋を生成 MonobitNetwork.CreateRoom(roomName, new RoomSettings() { isVisible = true, isOpen = true, maxPlayers = 4 }, null); } } else { GUILayout.Space(25); } } GUILayout.EndHorizontal(); // ルームの作成ボタン入力表示 if (isDispInputGUI) { if (GUILayout.Button("Join Random", GUILayout.Width(150))) { // ランダム入室をする MonobitNetwork.JoinRandomRoom(); } } else { GUILayout.Space(25); } // Footer GUILayout.EndVertical(); GUILayout.EndHorizontal(); } // ルームリストGUIレイヤー { // ルーム一覧の取得 RoomData[] roomList = MonobitNetwork.GetRoomData(); // ルーム一覧が存在する場合、ルームリストを表示 if (roomList != null) { // Header GUILayout.Label("Created Room List", new GUIStyle() { normal = state, fontSize = 24 }); GUILayout.BeginHorizontal(); GUILayout.Space(25); GUILayout.BeginVertical(); // ルームリストについて、1件ずつボタン入力表示 foreach (RoomData room in roomList) { if (isDispInputGUI && room.open && room.visible) { if (GUILayout.Button(room.name + " (" + room.playerCount + "/" + room.maxPlayers + ")", GUILayout.Width(300))) { MonobitNetwork.JoinRoom(room.name); } } } // Footer GUILayout.EndVertical(); GUILayout.EndHorizontal(); } } }
/** * ルーム作成設定. */ private void OnGUI_CreateOrJoinRoom() { // 値の入力 GUILayout.BeginHorizontal(); GUILayout.Label("Your Numeric Value(" + baseValueLow + "-" + baseValueHigh + ") : ", GUILayout.Width(200)); baseValue = Convert.ToInt32(GUILayout.TextField(baseValue.ToString(), GUILayout.Width(50))); GUILayout.EndHorizontal(); // ルーム最大人数の入力 GUILayout.BeginHorizontal(); GUILayout.Label("Room Max Players : ", GUILayout.Width(200)); maxPlayers = Convert.ToByte(GUILayout.TextField(maxPlayers.ToString(), GUILayout.Width(50))); GUILayout.EndHorizontal(); // ルームの作成 if (GUILayout.Button("Create Room", GUILayout.Width(250))) { // 入力した値が範囲外の場合、入力を無視する if (baseValue < baseValueLow || baseValue > baseValueHigh) { Debug.LogWarning("Your value must between" + baseValueLow + " and " + baseValueHigh); } else { // 自身の値をクエリーパラメータとして代入 customRoomParam["Value"] = baseValue; // ロビー抽出バラメータの設定 string[] customRoomParametersForLobby = { "Value" }; // ルームの作成 RoomSettings roomSettings = new RoomSettings() { isVisible = true, isOpen = true, maxPlayers = this.maxPlayers, roomParameters = this.customRoomParam, lobbyParameters = customRoomParametersForLobby }; MonobitNetwork.CreateRoom(null, roomSettings, null); } } // ルームへの入室 if (GUILayout.Button("Join Room", GUILayout.Width(250))) { // 入力した値が範囲外の場合、入力を無視する if (baseValue < baseValueLow || baseValue > baseValueHigh) { Debug.LogWarning("Your value must between" + baseValueLow + " and " + baseValueHigh); } else { // 自身の値に対し、検索範囲の最初の閾値を設定する baseValueMin = (baseValue - baseValueIncrease < baseValueLow) ? baseValueLow : baseValue - baseValueIncrease; baseValueMax = (baseValue + baseValueIncrease > baseValueHigh) ? baseValueHigh : baseValue + baseValueIncrease; // 閾値から、クエリー検索のためのWHERE句を生成する string queryLobbyFilter = "Value>=" + baseValueMin + " AND Value<=" + baseValueMax; // ルームへの入室 MonobitNetwork.JoinRandomRoom(null, this.maxPlayers, Definitions.MatchmakingMode.SerialMatching, new LobbyInfo() { Kind = LobbyKind.Query, Name = "QueryLobby" }, queryLobbyFilter); } } }
/** * ルーム内でのGUI操作. */ private void OnGUI_InRoom() { // 自身のプレイヤーIDの表示 GUILayout.Label("Your ID : " + MonobitNetwork.player.ID); // ルーム内に存在するプレイヤー数の表示 GUILayout.Label("PlayerCount : " + MonobitNetwork.room.playerCount + " / " + ((MonobitNetwork.room.maxPlayers == 0) ? "-" : MonobitNetwork.room.maxPlayers.ToString())); // ルームの入室制限可否設定の表示 GUILayout.Label("Room isOpen : " + MonobitNetwork.room.open); // ルーム作成者が入力した値 GUILayout.Label("Room Owner Numeric Value : " + MonobitNetwork.room.customParameters["Value"]); // 自身が入力した値 GUILayout.Label("My Skill Level : " + baseValue); // 制限時間の表示 if (isGameStart) { GUILayout.Label("Rest Frame : " + this.battleEndFrame); } // 部屋からの離脱 if (GUILayout.Button("Leave Room", GUILayout.Width(150))) { MonobitNetwork.LeaveRoom(); } // ホストの場合 if (MonobitNetwork.isHost) { // ゲームスタート if (!isGameStart && GUILayout.Button("Start Game", GUILayout.Width(150))) { this.isGameStart = true; // room.open = false; monobitView.RPC("GameStart", MonobitTargets.All, null); } // バトル終了 if (this.battleEndFrame <= 0) { // room.open = true; // 部屋から離脱する monobitView.RPC("LeaveRoomAll", MonobitTargets.All, null); } } // 他にルームが作成されている場合 if (MonobitNetwork.GetRoomData() != null && MonobitNetwork.GetRoomData().Length >= 1) { // 他の部屋に入室 if (GUILayout.Button("Enter Another Room", GUILayout.Width(150))) { // 一旦部屋から離脱する MonobitNetwork.LeaveRoom(); // 自身の値に対し、検索範囲の最初の閾値を設定する baseValueMin = (baseValue - baseValueIncrease < baseValueLow) ? baseValueLow : baseValue - baseValueIncrease; baseValueMax = (baseValue + baseValueIncrease > baseValueHigh) ? baseValueHigh : baseValue + baseValueIncrease; // 閾値から、クエリー検索のためのWHERE句を生成する string queryLobbyFilter = "Value>=" + baseValueMin + " AND Value<=" + baseValueMax; // ルームへの入室 MonobitNetwork.JoinRandomRoom(null, this.maxPlayers, Definitions.MatchmakingMode.SerialMatching, new LobbyInfo() { Kind = LobbyKind.Query, Name = "QueryLobby" }, queryLobbyFilter); } } }
private void OnGUI() { // デフォルトのボタンと被らないように、段下げを行なう。 GUILayout.Space(24); // MUNサーバに接続している場合 if (MonobitNetwork.isConnect) { // ボタン入力でサーバから切断&シーンリセット if (GUILayout.Button("Disconnect", GUILayout.Width(150))) { // サーバから切断する MonobitNetwork.DisconnectServer(); // シーンをリロードする #if UNITY_5_3_OR_NEWER || UNITY_5_3 string sceneName = UnityEngine.SceneManagement.SceneManager.GetActiveScene().name; UnityEngine.SceneManagement.SceneManager.LoadScene(sceneName); #else Application.LoadLevel(Application.loadedLevelName); #endif } // ルームに入室している場合 if (MonobitNetwork.inRoom) { // ボタン入力でルームから退室 if (GUILayout.Button("Leave Room", GUILayout.Width(150))) { MonobitNetwork.LeaveRoom(); } } // ルームに入室していない場合 if (!MonobitNetwork.inRoom) { GUILayout.BeginHorizontal(); // ルーム名の入力 GUILayout.Label("RoomName : "); roomName = GUILayout.TextField(roomName, GUILayout.Width(200)); // ボタン入力でルーム作成 if (GUILayout.Button("Create Room", GUILayout.Width(150))) { MonobitNetwork.CreateRoom(roomName); } GUILayout.EndHorizontal(); // 現在存在するルームからランダムに入室する if (GUILayout.Button("Join Random Room", GUILayout.Width(200))) { MonobitNetwork.JoinRandomRoom(); } // ルーム一覧から選択式で入室する foreach (RoomData room in MonobitNetwork.GetRoomData()) { string strRoomInfo = string.Format("{0}({1}/{2})", room.name, room.playerCount, (room.maxPlayers == 0) ? "-" : room.maxPlayers.ToString()); if (GUILayout.Button("Enter Room : " + strRoomInfo)) { MonobitNetwork.JoinRoom(room.name); } } } } }
void OnJoinedLobby() { bSelectMenu = false; Debug.Log("OnJoinedLobby"); MonobitNetwork.JoinRandomRoom(); }