ネットワーク越しのオブジェクトの生成

目次

  概要
  事前設定
  MonobitEngine.MonobitNetwork.Instantiate メソッド(1)
  MonobitEngine.MonobitNetwork.Instantiate メソッド(2)
  MonobitEngine.MonobitNetwork.InstantiateSceneObject メソッド
  インスタンス生成されたオブジェクトの自動破棄
  接続コールバック


概要

プレハブのインスタンス生成を「ネットワーク上で同期」させて実行する

  プレハブのインスタンス生成を行なう Unity のメソッドとして UnityEngine.Instantiate がありますが、
  これはあくまでローカル上でのインスタンス生成であり、ネットワーク越しに生成するためには、それなりのプロセスが必要です。

  MUN では、ネットワークの垣根を超えて同時にインスタンス生成するための、インタフェースを用意しています。
  ここではそれについて御紹介します。


事前設定

プレハブは Resources フォルダに格納する必要があります。

  非常に重要なことですが、プレハブは Resources という名称のフォルダに入れてください。
  スペルミスにも注意してください。(一文字でも間違えると機能しません。)

生成されるプレハブに MonobitView コンポーネントを登録する必要があります。

  また、生成されるプレハブは、必ず MonobitView コンポーネントが登録されている状態にしてください。
  登録していない場合には生成されません。

MUNサーバに接続しており、かつルームに入室している必要があります。

  オブジェクト生成はマルチプレイ用の制御ですので、ルームに入室していない状態で出現させることはできません。


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

機能

  ネットワーク越しに、プレハブからインスタンスを生成します。

引数

変数名 内容
string prefabName インスタンスを生成するプレハブ名。
該当するプレハブは、必ず Resources フォルダ内に置かれている必要があります。
Vector3 position インスタンス生成時に適用する、Vector3 で表される位置情報。
Quaternion rotation インスタンス生成時に適用する、Quaternion で表される回転情報。
int group インスタンス生成後に所属することになる、MonobitView のグループID。
グループについては こちら を御覧ください。

戻り値

内容
GameObject インスタンス生成されたGameObjectの情報。

記述例

/*
 * ネットワーク越しに、"Prefab"という名前のプレハブをインスタンス生成します。
 * 位置は (0, 0, 0), 回転量は ( 0, 0, 0), グループIDは 0 を指定します。
 */
MonobitEngine.MonobitNetwork.Instantiate( "Prefab", Vector3.zero, Quaternion.identity, 0 );


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

機能

  ネットワーク越しに、プレハブからインスタンスを生成します。

引数

変数名 内容
string prefabName インスタンスを生成するプレハブ名。
該当するプレハブは、必ず Resources フォルダ内に置かれている必要があります。
Vector3 position インスタンス生成時に適用する、Vector3 で表される位置情報。
Quaternion rotation インスタンス生成時に適用する、Quaternion で表される回転情報。
int group インスタンス生成後に所属することになる、MonobitView のグループID。
グループについては こちら を御覧ください。
object[] data 付随するインスタンス生成の情報。
ここで指定した情報は生成後に、MonobitView.instantiationData に格納されます。

戻り値

内容
GameObject インスタンス生成されたGameObjectの情報。

記述例

/*
 * ネットワーク越しに、"Prefab"という名前のプレハブをインスタンス生成します。
 * 位置は (0, 0, 0), 回転量は ( 0, 0, 0), グループIDは 0 を指定します。
 * 生成後、MonobitView.instantiationData には何も入れません。
 */
MonobitEngine.MonobitNetwork.Instantiate( "Prefab", Vector3.zero, Quaternion.identity, 0, null );


MonobitEngine.MonobitNetwork.InstantiateSceneObject メソッド

機能

  ネットワーク越しに、プレハブからシーンインスタンスを生成します。
  生成されたシーンインスタンスは、ホストが所有権を持ちます。

引数

変数名 内容
string prefabName インスタンスを生成するプレハブ名。
該当するプレハブは、必ず Resources フォルダ内に置かれている必要があります。
Vector3 position インスタンス生成時に適用する、Vector3 で表される位置情報。
Quaternion rotation インスタンス生成時に適用する、Quaternion で表される回転情報。
int group インスタンス生成後に所属することになる、MonobitView のグループID。
グループについては こちら を御覧ください。
object[] data 付随するインスタンス生成の情報。
ここで指定した情報は生成後に、MonobitView.instantiationData に格納されます。

戻り値

内容
GameObject インスタンス生成されたGameObjectの情報。

記述例

/*
 * ネットワーク越しに、"Prefab"という名前のプレハブをシーンインスタンスとして生成します。
 * 位置は (0, 0, 0), 回転量は ( 0, 0, 0), グループIDは 0 を指定します。
 * 生成後、MonobitView.instantiationData には何も入れません。
 */
MonobitEngine.MonobitNetwork.InstantiateSceneObject( "Prefab", Vector3.zero, Quaternion.identity, 0, null );


インスタンス生成されたオブジェクトの自動破棄

MonobitEngine.MonobitNetwork.Instantiate メソッドで生成したオブジェクトの自動破棄

  MonobitEngine.MonobitNetwork.Instantiate メソッドで生成したオブジェクトは、以下の段階で自動破棄されます。
  (ネットワーク越しに、他クライアント上でも破棄されます)
・所有権を持つプレイヤーがルームから退室した場合
・所有権を持つプレイヤーがアプリケーションを終了させた場合
・所有権を持つプレイヤーのネットワーク回線が途中で切断してしまった場合
・自身がルームを退室した場合
・ルームが消去された場合
・該当するオブジェクトに対し、ネットワーク越しのオブジェクトの破棄を実行した場合

MonobitEngine.MonobitNetwork.InstantiateSceneObject メソッドで生成したオブジェクトの自動破棄

  MonobitEngine.MonobitNetwork.InstantiateSceneObject メソッドで生成したオブジェクトは、以下の段階で自動破棄されます。
  (ネットワーク越しに、他クライアント上でも破棄されます)
・自身がルームを退室した場合
・ルームが消去された場合
・該当するオブジェクトに対し、ネットワーク越しのオブジェクトの破棄を実行した場合



接続コールバック

インスタンスが生成された際にコールバックされるメソッド

  このメソッドの実行結果に応じて、以下の接続コールバックが呼び出されます。
  (接続コールバックについては こちら を参照してください。)
OnMonobitInstantiate 自身、もしくはルーム内の誰かが、MonobitEngine.MonobitNetwork.Instantiate を使ってプレハブをインスタンス化したときにコールされます。
インスタンス化対象となるプレハブにアタッチされているスクリプトでのみコールされますので、ご注意ください。