敵キャラクタをネットワーク越しに出現させる

目次

  概要
  敵キャラクタを登場させる
  ここまでの内容について、一旦セーブする


概要

アイスキャンディを取ったときに敵キャラクタを「ネットワーク越し」に登場させる

  ネットワークを介したプレイヤーキャラクタの同期ができるようになりましたが、まだ問題があります。

  現在、ステージ上のアイスキャンディを取っても、敵キャラクタであるテディベアが登場することはありません。
  敵キャラクタをプレハブ化したあと、そのまま何もせず放置しているからです。

  改めて、敵キャラクタを登場させ、プレイヤーを襲うようにしましょう。


敵キャラクタを登場させる

敵キャラクタを出現させているスクリプトファイルを開く

  Hierarchy に、 「NPC_Spawner」 という、いかにも「NPC(Bear)を出現させる何か」を思わせるオブジェクトがあります。
  これをクリックします。
  Inspector に、Spawner というスクリプトがありますので、これをダブルクリックして開きましょう。

敵キャラクタを「全てのクライアントでほぼ同時に」出現させる

  Spawner.cs の 27 行目付近にある、
GameObject newNPC = Instantiate(...)
  と記述されているところが「従来の敵キャラクタの出現処理」ですが、この行をマルチプレイ対応させるため削除します。
  削除した Spawner.cs の 27行目付近に、代替として MUN で用意されている MonobitNetwork.Instantiate() に置き換えます。
  以下の内容を追記してください。
                    GameObject newNPC = MonobitEngine.MonobitNetwork.Instantiate(
                        ToSpawn.name,
                        position,
                        Quaternion.Euler(0, Random.value * 180, 0),
                        0,
                        null,
                        true,
                        false,
                        true) as GameObject;

  MonobitNetwork.Instantiate() メソッド を使い、ネットワーク越しに全てのクライアントに対し、
  シーンオブジェクトとして敵キャラクタを登場させます。

  このメソッド内で指定しているパラメータは以下の通りです。
第1引数 ToSpawn.name GameObjectとして生成される元データの、プレハブの名前を指定します。
注意すべき点として、読み込み対象となるprefabファイルが、Resources フォルダに存在する必要があります。
第2引数 position GameObjectを出現させる座標値について、Vector3型で指定します。
第3引数 Quaternion.Euler(0, Random.value*180, 0) GameObjectを出現させるときの回転量について、Quaternion型で指定します。
第4引数 0 その GameObject が所属する、MUNネットワーク上のグループIDを指定します。
通常は 0 を指定します。
第5引数 null GameObject を作成する際の付随情報を設定します。
特に何もなければ null を指定します。
第6引数 true シーン切り替えに伴い、生成したオブジェクトの情報を維持するかどうかのフラグを指定します。
true に設定した場合、内部的に Unity API の DontDestroyOnLoad() と同機能を実行し、
シーン切り替えに伴うオブジェクト情報を維持します。
第7引数 false 生成したオブジェクトの所有権を自分自身が有するかどうかのフラグを指定します。
false に設定した場合、生成した所有者は存在せず、生成した段階のシーン静的オブジェクトとして扱われます。
第8引数 true 所有者のルーム退室に伴い、生成したオブジェクトの情報を維持するかどうかのフラグを指定します。
true に設定した場合、生成した所有者がルームから退室した後も残留します。

敵キャラクタのプレハブを「ToSpawn」に登録する

  更に、この Spawner.cs で使用している public 変数「ToSpawn」について、
  プレハブ化の際にリンクが切れてしまっているので、ToSpawn に NPC のプレハブを登録しましょう。

  Projectビューの Assets/Resources を開き、その中にある NPC を、
  NPC_Spanwer の Inspector にある To Spawn の項目に対し、ドラッグ&ドロップします。
  Inspector の To Spawn に、以下のように NPC が登録されれば成功です。


ここまでの内容について、一旦セーブする

スクリプトを保存する

  ここまでプログラムを組んできた NetworkControl.cs を保存しましょう。
  Visual Studio のメニューから [ファイル] > [すべて保存] を選択してください。

シーンデータを保存する

  変更を加えたシーンも保存しましょう。
  Unity のメニューから File > Save (または File > Save Scene) を選択してください。