・サーバから切断した時点で、自分自身が生成したオブジェクトは、ネットワーク越しに消失するため、 再接続した時に、クライアント側からネットワーク越しに再生成をします。 ・途中断線の場合、サーバから切断→再接続までは自動化させます。 (今回は省略しますが、できれば、「再接続しますか?」のアナウンスがあると良いです。)
using System;
using UnityEngine;
public class Foo : MonobitEngine.MonoBehaviour
{
// プレハブ名(仮)
string prefabName = "prefabName";
// バックアップ対象となるゲームオブジェクトと、その座標値・回転量の情報
GameObject gameObj = null;
Vector3 position = Vector3.zero;
Quaternion rotation = Quaternion.identity;
public void Update()
{
// Network.Instantiate を実行する。
// 説明上、「ルーム内に入室していて、オブジェクトが生成されていないとき」にリアルタイムに生成するものとする。
if( MonobitEngine.MonobitNetwork.isConnect && MonobitEngine.MonobitNetwork.inRoom )
{
if( gameObj == null )
{
gameObj = MonobitEngine.MonobitNetwork.Instantiate( prefabName, position, rotation, 0 );
}
// 座標値・回転量の退避
position = gameObj.transform.position;
rotation = gameObj.transform.rotation;
}
/*
* その他、gameObj の制御や、接続制御など。
*/
}
}
・切断された場合 OnDisconnectedFromServer のコールバックが呼び出される。 → ひとまずサーバに再接続する。 ・再接続が完了し、ロビーに入室できたら、OnJoinedLobby のコールバックが呼び出される。 → 以前入室していたルームに再入室する。 同時に、プレハブ情報など、必要な情報を復元するための処置を行なう。
// 上記で説明したクラスと同クラスに追記。
public class Foo : MonobitEngine.MonoBehaviour
{
// ルーム名の退避
string roomName = "";
public void Update()
{
/*
* 上述の内容(省略)
*/
// ルーム名を退避する
if( MonobitEngine.MonobitNetwork.isConnect && MonobitEngine.MonobitNetwork.inRoom )
{
roomName = MonobitEngine.MonobitNetwork.room.name;
}
/*
* その他、gameObj の制御や、接続制御など
*/
}
// 途中切断されたときの処理
public void OnDisconnectedFromServer()
{
/*
* MoobitEngine.MonobitNetwork.ConnectServer を使って、サーバへの再接続を実行する(省略)
*/
}
// 接続完了&ロビーへの接続完了したときの処理
public void OnJoinedLobby()
{
// 退避しておいたルーム名に入室する
if( !String.IsNullOrEmpty(roomName) )
{
MonobitEngine.MonobitNetwork.JoinRoom(roomName);
// ここで gameObj をリセット
gameObj = null;
}
}
}