ネットワーク越しのオブジェクトの破棄
目次
概要
事前設定
MonobitEngine.MonobitNetwork.Destroy メソッド(1)
MonobitEngine.MonobitNetwork.Destroy メソッド(2)
MonobitEngine.MonobitNetwork.DestroyPlayer メソッド(1)
MonobitEngine.MonobitNetwork.DestroyPlayer メソッド(2)
MonobitEngine.MonobitNetwork.DestroyAll メソッド
インスタンス生成したオブジェクトの破棄を「ネットワーク上で同期」させて実行する
マルチプレイゲームの場合、インスタンスの生成と同様に、オブジェクトの破棄についても、
「ネットワーク越し」のクライアント上でも同時に実行されなければなりません。
前節に合わせて、「ネットワーク越し」にオブジェクトを破棄するための、インタフェースについて説明しましょう。
自動破棄されるケースの場合、オブジェクト破棄の命令は不要です
なお、以下のケースの場合、オブジェクトは自動的にネットワーク越しに破棄されます。
「破棄する処理」を、わざわざ記述する必要はございません。
・所有権を持つプレイヤーがルームから退室した場合
・所有権を持つプレイヤーがアプリケーションを終了させた場合
・所有権を持つプレイヤーのネットワーク回線が途中で切断してしまった場合
・ルームが消去された場合
・(isDontDestroyOnLoad パラメータを false に設定した場合のみ)シーンを変更した場合
・(isDontDestroyOnRoom パラメータを true に設定しない場合のみ)所有権を保有するクライアントがルームから退室した場合
事前設定▲
破棄したいオブジェクトの「所有権」がある必要があります。
破棄したいオブジェクトの「所有権」がないプレイヤーでは、削除することが出来ません。
オブジェクトの所有権につきましては こちら を御覧ください。
MonobitEngine.MonobitNetwork.Destroy メソッド(1)▲
機能
ネットワーク越しに、指定した MonobitView を持つ GameObject を破棄します。
引数
型 |
変数名 |
内容 |
MonobitView |
tagetView |
破棄対象となる GameObject が所持する MonobitView 情報 |
戻り値
記述例
/*
* 外部から UnityEngine.Destroy の実行された場合に、
* 自身を「ネットワーク越しに削除できる」クラスを作成します。
*/
class Foo : MonobitEngine.MonoBehaviour
{
...
void OnDestroy()
{
MonobitNetwork.Destroy(monobitView);
}
...
}
MonobitEngine.MonobitNetwork.Destroy メソッド(2)▲
機能
ネットワーク越しに、指定した GameObject を破棄します。
引数
型 |
変数名 |
内容 |
MonobitView |
gameObject |
破棄対象となる GameObject |
戻り値
記述例
/*
* 衝突してきた GameObject を「ネットワーク越しに削除」します。
* (Collider/Rigidbodyが有効である必要があります。)
*/
class Foo : MonobitEngine.MonoBehaviour
{
...
void OnCollisionEnter(Collision collision)
{
MonobitNetwork.Destroy(collision.gameObject);
}
...
}
MonobitEngine.MonobitNetwork.DestroyPlayer メソッド(1)▲
機能
「ネットワーク越し」に、指定したプレイヤーが所有している GameObject、 MonobitView、
および、バッファリングされた RPC を全て削除します。
RPC につきましては こちら を御覧ください。
引数
型 |
変数名 |
内容 |
MonobitPlayer |
targetPlayer |
破棄対象となるプレイヤー情報 |
戻り値
記述例
/*
* 衝突されたら、「ネットワーク越し」に、相手が保有する全オブジェクトを消滅させます。
* (Collider/Rigidbodyが有効である必要があります。)
*/
class Foo : MonobitEngine.MonoBehaviour
{
...
void OnCollisionEnter(Collision collision)
{
MonobitNetwork.DestroyPlayer(MonobitView.Get(collision.gameObject).owner);
}
...
}
MonobitEngine.MonobitNetwork.DestroyPlayer メソッド(2)▲
機能
「ネットワーク越し」に、指定したIDと一致するプレイヤーが所有している GameObject、 MonobitView、
および、バッファリングされた RPC を全て削除します。
RPC につきましては こちら を御覧ください。
引数
型 |
変数名 |
内容 |
int |
targetPlayerId |
破棄対象となるプレイヤーのID |
戻り値
記述例
/*
* 衝突されたら、「ネットワーク越し」に、自分の所有する全オブジェクトを消滅させます。
* (Collider/Rigidbodyが有効である必要があります。)
*/
class Foo : MonobitEngine.MonoBehaviour
{
...
void OnCollisionEnter(Collision collision)
{
MonobitNetwork.DestroyPlayer(MonobitNetwork.player.ID);
}
...
}
MonobitEngine.MonobitNetwork.DestroyAll メソッド▲
機能
「ネットワーク越し」に、ルーム内の全ての GameObject、 MonobitView、 および、バッファリングされた RPC を削除します。
このメソッドを実行できるのはホストだけです。
RPC につきましては こちら を御覧ください。
また、ホストにつきましては こちら を御覧ください。
引数
戻り値
記述例
/*
* ホストがボタンを押したら、ルーム内の全てのオブジェクトが消滅します。
*/
class Foo : MonobitEngine.MonoBehaviour
{
...
void OnGUI()
{
...
if( MonobitNetwork.isHost )
{
if( GUILayout.Button("ルーム内の全オブジェクト消滅ボタン") )
{
MonobitNetwork.DestroyAll();
}
}
...
}
...
}