ネットワーク越しのオブジェクトの破棄

目次

  概要
  事前設定
  MonobitEngine.MonobitNetwork.Destroy メソッド(1)
  MonobitEngine.MonobitNetwork.Destroy メソッド(2)
  MonobitEngine.MonobitNetwork.DestroyPlayer メソッド(1)
  MonobitEngine.MonobitNetwork.DestroyPlayer メソッド(2)
  MonobitEngine.MonobitNetwork.DestroyAll メソッド


概要

インスタンス生成したオブジェクトの破棄を「ネットワーク上で同期」させて実行する

  マルチプレイゲームの場合、インスタンスの生成と同様に、
  オブジェクトの破棄についても、「ネットワーク越し」に実行しなければなりません。

  前節に合わせて、「ネットワーク越し」にオブジェクトを破棄するための、インタフェースについて説明しましょう。

自動破棄されるケースの場合、オブジェクト破棄の命令は不要です

  なお、以下のケースの場合、オブジェクトは自動的にネットワーク越しに破棄されます。
  「破棄する処理」を、わざわざ記述する必要はございません。
■ MonobitEngine.MonobitNetwork.Instantiate メソッドで、インスタンス生成したオブジェクトに対して
  ・所有権を持つプレイヤーがルームから退室する場合
  ・所有権を持つプレイヤーがアプリケーションを終了させる場合
  ・所有権を持つプレイヤーのネットワーク回線が途中で切断してしまった場合
  ・自身がルームを退室する場合
  ・ルームが消去される場合

■ MonobitEngine.MonobitNetwork.InstantiateSceneObject メソッドで、インスタンス生成したオブジェクトに対して
  ・自身がルームを退室する場合
  ・ルームが消去される場合

「UnityEngine.Destroy を使う感覚」で使用するのが良策です

  使用用途としては、UnityEngine.Destroy の代替と考えてください。

事前設定

破棄したいオブジェクトの「所有権」がある必要があります。

  破棄したいオブジェクトの「所有権」がないプレイヤーでは、削除することが出来ません。
  オブジェクトの所有権につきましては こちら を御覧ください。


MonobitEngine.MonobitNetwork.Destroy メソッド(1)

機能

  ネットワーク越しに、指定した MonobitView を持つ GameObject を破棄します。

引数

変数名 内容
MonobitView tagetView 破棄対象となる GameObject が所持する MonobitView

戻り値

内容
void -

記述例

/*
 * 外部から UnityEngine.Destroy の実行された場合に、
 * 自身を「ネットワーク越しに削除できる」クラスを作成します。
 */
class Foo : MonobitEngine.MonoBehaviour
{
    ...

    void OnDestroy()
    {
        MonobitNetwork.Destroy(monobitView);
    }

    ...
}


MonobitEngine.MonobitNetwork.Destroy メソッド(2)

機能

  ネットワーク越しに、指定した GameObject を破棄します。

引数

変数名 内容
MonobitView gameObject 破棄対象となる GameObject

戻り値

内容
void -

記述例

/*
 * 衝突してきた 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 破棄対象となるプレイヤー情報

戻り値

内容
void -

記述例

/*
 * 衝突されたら、「ネットワーク越し」に、相手が保有する全オブジェクトを消滅させます。
 * (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

戻り値

内容
void -

記述例

/*
 * 衝突されたら、「ネットワーク越し」に、自分の所有する全オブジェクトを消滅させます。
 * (Collider/Rigidbodyが有効である必要があります。)
 */
class Foo : MonobitEngine.MonoBehaviour
{
    ...

    void OnCollisionEnter(Collision collision)
    {
        MonobitNetwork.DestroyPlayer(MonobitNetwork.player.ID);
    }

    ...
}


MonobitEngine.MonobitNetwork.DestroyAll メソッド

機能

  「ネットワーク越し」に、ルーム内の全ての GameObject、 MonobitView、 および、バッファリングされた RPC を削除します。
  このメソッドを実行できるのはホストだけです。

  RPC につきましては こちら を御覧ください。
  また、ホストにつきましては こちら を御覧ください。

引数

変数名 内容
- - -

戻り値

内容
void -

記述例

/*
 * ホストがボタンを押したら、ルーム内の全てのオブジェクトが消滅します。
*/
class Foo : MonobitEngine.MonoBehaviour
{
    ...
    
    void OnGUI()
    {
        ...
        
        if( MonobitNetwork.isHost )
        {
            if( GUILayout.Button("ルーム内の全オブジェクト消滅ボタン") )
            {
                MonobitNetwork.DestroyAll();
            }
        }
        
        ...
    }
    
    ...
}