Unity:生成と再生成~マルチプレイヤーネットワーキングのチュートリアルに挑戦

Unityの公式チュートリアル「マルチプレイヤーネットワーキング」の実習の模様をお送りしております。前回の記事はこちらからどうぞ

生成と再生成

公式サイトのチュートリアルページ 生成と再生成

今回でいよいよ最後のステップ。プレイヤーの生成位置を設定します。

プレイヤーの初期生成位置を作成

  1. 空のゲームオブジェクトを 1 つ新規作成して名前を “Spawn Position 1” に変更
  2. オブジェクト Spawn Position 1 を選択
  3. Network > NetworkStartPosition コンポーネントを追加
  4. Transform Position を X 3, Y 0, Z 0 に設定
  5. オブジェクト Spawn Position 1 を複製する
  6. 複製したオブジェクトの名前を “Spawn Position 2” に変更
  7. Spawn Position 2 ゲームオブジェクトを選択
  8. Transform Position を X -3, Y 0, Z 0 に設定
  9. [Hierarchy]ウィンドウ > Network Managerを選択
  10. Network Managerコンポーネント > Spawn Info のドロップダウンメニューを開く
  11. Player Spawn Method を Round Robin に変更

オブジェクト Spawn Position 1 を[Inspector]ウィンドウで確認するとこのようになっています。

オブジェクト Spawn Position 2 を[Inspector]ウィンドウで確認するとこのようになっています。

オブジェクト Network Manager の[Inspector]ウィンドウで Network Manager コンポーネント を確認するとこのようになっています。

動作確認

  1. シーンをスタンドアロンのアプリケーションとして Build and Run を実行
  2. ゲーム内 UI から[Host]ボタンをクリックしてゲームをホストとして開始
  3. プレイヤーゲームオブジェクトを動かす
  4. Unity に戻ってPlay モードを開始
  5. ゲーム内 UI から[LAN Client]ボタンをクリックしてクライアントとしてホストに接続
  6. ゲームが開始されると、シーン内の異なる場所にプレイヤーが生成されることを確認
  7. スタンドアロン・プレイヤーを終了
  8. Unity に戻ってPlay モードを終了

ビルドしたゲームを実行し、ゲームを再生して[Scene]ビューで上から見下ろして確認するとホスト側のプレイヤーとクライアント側のキャラクターがそれぞれオブジェクトSpawn Position の位置に生成されています。

Health スクリプトを修正して再生成位置を設定する

  1. Health スクリプトを開く
  2. 生成位置を格納する配列 NetworkStartPosition を追加
  3. Start 関数を追加
  4. NetworkStartPosition コンポーネントの全てのインスタンスを検索してそれを Spawn Points 配列に保存するロジックを追加
  5. RpcRespawn 関数内の isLocalPlayer チェック内にある既存のコードを削除
  6. RpcRespawn 関数内の、isLocalPlayer チェック内のコードを、生成位置(spawn points)の配列から抽出したランダムな位置を使用するように更新
  7. スクリプトを保存

修正したスクリプトのコードにコメントを加えたものがこちら。

動作確認

  1. シーンをスタンドアロンのアプリケーションとして Build and Run を実行
  2. ゲーム内 UI から[Host]ボタンをクリックしてゲームをホストとして開始
  3. プレイヤーゲームオブジェクトを動かす
  4. Unity に戻ってPlay モードを開始
  5. ゲーム内 UI から[LAN Client]ボタンをクリックしてクライアントとしてホストに接続
  6. ゲームの開始時に、シーン内の異なる位置にプレイヤーが生成されることを確認
  7. 体力がゼロになったプレイヤーは生成位置からランダムに再生成されることを確認
  8. スタンドアロン・プレイヤーを終了
  9. Unity に戻ってPlay モードを終了

このステップを終えてゲームを実行。ビルドしたゲームを2つ実行してウィンドウを並べました。画面右側がホスト(サーバー&クライアント)で画面左がクライアントです。左側奥にいるクライアントのプレイヤーを攻撃して体力が無くなると…

再生成位置はランダムに変わります。なので同じ Spawn Position で連続して再生成される場合もあります。

今回のステップは再生成位置のオブジェクトを配列に格納してランダムに取り出す部分が難しかったですね。今回のステップでこのチュートリアルは終了ですが、引き続き改造を進めたいと思います。