接続コールバックの適用
目次
概要
サーバ接続状況のメッセージを出力するためのGUIを用意する
サーバ接続に失敗した時の処理を作る
サーバ接続中に途中切断された時の処理を作る
他にもいろいろな接続コールバックメソッドがあります!
サーバ接続状態のコールバックを用意する
前述までの内容で、一通りオンラインゲームとしては完成しましたが、
最後に「接続コールバック」について触れておきます。
オンラインゲームは、ネットワークの接続状態、サーバの稼働状況などにより、
ゲームの維持が不可能になるケースが多々存在します。
そういった場合でも問題なくユーザーがプレイ出来るよう、
「今、ネットワーク上で何が起きているのか」をユーザーに通知できるような機能が必要です。
MUN では、サーバ接続状況に応じた、いくつかのコールバックを用意しています。
これを利用して、様々な情報通知を行なってみましょう。
サーバ接続状況のメッセージを出力するためのGUIを用意する▲
NetworkControlを開く
まずは、サーバ接続状況を表示する仕組みを作ります。
Hierarchy から、本章の最初に作成した空オブジェクト「GameObject」をクリックしてください。
Inspector の表示から、NetworkControl をダブルクリックして、スクリプトを開きます。
サーバ接続状態を表示するためのウィンドウを用意する
NetworkControl の 13 行目に、以下のコードを記述します。
/** ウィンドウ表示フラグ. */
private bool bDisplayWindow = false;
/**
* ウィンドウ表示用メソッド.
*/
void WindowControl(int windowId)
{
}
ウィンドウ表示用フラグとメソッドを用意します。
続けて、NetworkControl の 48 行目(OnGUI() メソッド内)に、以下のコードを記述します。
// サーバ接続状況に応じて、ウィンドウを表示する
if(bDisplayWindow)
{
GUILayout.Window(0, new Rect(Screen.width / 2 - 100, Screen.height / 2 - 40, 200, 80), WindowControl, "Caution");
}
ウィンドウ表示フラグに応じて、ウィンドウを表示するようにします。
サーバ接続に失敗した時の処理を作る▲
サーバ接続失敗フラグを用意する
NetworkControl の 16 行目に、以下のコードを記述します。
/** サーバ接続失敗フラグ. */
private bool bConnectFailed = false;
サーバ接続失敗コールバックの実装
続けて、NetworkControl の 19 行目に、以下のコードを記述します。
/**
* サーバ接続失敗コールバック.
*/
public void OnConnectToServerFailed(object parameters)
{
Debug.Log("OnConnectToServerFailed : StatusCode = " + parameters);
bConnectFailed = true;
bDisplayWindow = true;
}
サーバへの接続処理(MonobitNetwork.ConnectServer()メソッド)に失敗した場合、
OnConnectToServerFailed() メソッドが自動的にコールされます。
OnConnectToServerFailed() は、MonobitEngine.MonoBehaviour に定義されているコールバックメソッドです。
引数値の parameters には、接続失敗理由が記述されています。
これをデバッグコンソール上に表示するようにし、先に用意した「サーバ接続失敗フラグ」と「ウィンドウ表示フラグ」を立てます。
サーバ接続失敗コールバックに処理が来た時に、GUIウィンドウ経由でユーザーに通知する
続けて、NetworkControl の 34行目(WindowControl() メソッド内)に、以下のコードを記述します。
// GUIスタイル設定
GUIStyle style = new GUIStyle();
style.alignment = TextAnchor.MiddleCenter;
GUIStyleState stylestate = new GUIStyleState();
stylestate.textColor = Color.white;
style.normal = stylestate;
// 接続失敗時の表示
if ( bConnectFailed )
{
GUILayout.Label("接続に失敗しました。\n再接続しますか?", style);
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if (GUILayout.Button("はい", GUILayout.Width(50)))
{
// もう一度接続処理を実行する
MonobitNetwork.ConnectServer("Bearpocalypse_v1.0");
bConnectFailed = false;
bDisplayWindow = false;
}
if (GUILayout.Button("いいえ", GUILayout.Width(50)))
{
// オフラインモードで起動する
MonobitNetwork.offline = true;
bConnectFailed = false;
bDisplayWindow = false;
}
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
return;
}
GUILayout 系の説明は割愛します。
接続失敗時に再接続を促すウィンドウを表示します。
「再接続しますか?」の問いかけに「はい」を選んだ場合、MonobitNetwork.ConnectServer() メソッドを使って再接続を試みます。
「いいえ」を選んだ場合、オフラインモードで起動します。
MonobitNetwork.offline は「オフラインモードでの起動処理」です。
オフラインモードではネットワーク接続を行ないませんが、オンラインでソロプレイをするのと同じような挙動を行ないます。
サーバ接続中に途中切断された時の処理を作る▲
途中切断フラグを用意する
NetworkControl の 16 行目に、以下のコードを記述します。
/** サーバ途中切断フラグ. */
private static bool bDisconnect = false;
途中切断コールバックの実装
続けて、NetworkControl の 22 行目に、以下のコードを記述します。
/**
* 途中切断コールバック.
*/
public void OnDisconnectedFromServer()
{
Debug.Log("OnDisconnectedFromServer");
if( bDisconnect == false )
{
bDisconnect = true;
bDisplayWindow = true;
}
else
{
bDisconnect = false;
}
}
サーバ接続中、回線不良などによる途中切断した場合、あるいは MonobitNetwork.DisconnectServer() をコールした場合に、
OnDisconnectedFromServer() メソッドが自動的にコールされます。
OnDisconnectedFromServer() は、MonobitEngine.MonoBehaviour に定義されているコールバックメソッドです。
切断したことをデバッグコンソール上に表示するようにし、「サーバ途中切断フラグが立っていないとき」に
「サーバ途中切断フラグ」と「ウィンドウ表示フラグ」を立てます。
後述しますが、MonobitNetwork.DisconnectServer() をコールした時には bDisconnect にあらかじめ true を入れ
「正常に切断したのに途中切断扱いになる」のを防ぎます。
途中切断コールバックに処理が来た時に、GUIウィンドウ経由でユーザーに通知する
続けて、NetworkControl の 61 行目(WindowControl() メソッド内)に、以下のコードを記述します。
// 途中切断時の表示
if ( bDisconnect )
{
GUILayout.Label("途中切断しました。\n再接続しますか?", style);
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if (GUILayout.Button("はい", GUILayout.Width(50)))
{
// もう一度接続処理を実行する
MonobitNetwork.ConnectServer("Bearpocalypse_v1.0");
bDisconnect = false;
bDisplayWindow = false;
}
if (GUILayout.Button("いいえ", GUILayout.Width(50)))
{
// シーンをリロードし、初期化する
Application.LoadLevel(Application.loadedLevel);
}
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
return;
}
GUILayout 系の説明は割愛します。
途中切断時に再接続を促すウィンドウを表示します。
「再接続しますか?」の問いかけに「はい」を選んだ場合、MonobitNetwork.ConnectServer() メソッドを使って再接続を試みます。
「いいえ」を選んだ場合、シーンをリロードし、初期化します。
正常切断した場合に、GUIウィンドウで通知しないようにする
NetworkControl の 150 行目(OnGUI() メソッド内)に、以下のコードを記述します。
// 正常動作のため、bDisconnect を true にして、GUIウィンドウ表示をキャンセルする
bDisconnect = true;
他にもいろいろな接続コールバックメソッドがあります!▲
接続コールバックの種類については別ページで説明します
他にも「サーバへの接続」「ロビーの入退室」「ルームの入退室」などなど、
MUNサーバとの接続状況を知るための様々なコールバックを用意しています。
コールバックの詳しい説明については こちら のページでご確認ください。