Unity:シューティング(シングルプレイヤー)~マルチプレイヤーネットワーキングのチュートリアルに挑戦

Unityの公式チュートリアルに掲載されているマルチプレイヤーネットワーキングを勉強を進めている様子をお送りします。前回の記事はこちらからどうぞ

シューティング(シングルプレイヤー)

公式サイトのチュートリアルページ シューティング(シングルプレイヤー)

今回ステップは非ネットワークの状態でプレイヤーにシューティング機能を追加します。

弾のプレハブを作成する

  1. 基本オブジェクト Sphere を作成して名前を “Bullet” に変更
  2. オブジェクト Sphere の Transform > Scaleを (X 0.2, Y 0.2, Z 0.2) に変更
  3. オブジェクト Sphere に Physics > Rigidbody コンポーネントを追加
  4. Rigidbody コンポーネントの Use Gravity チェックボックスを false に設定
  5. オブジェクト Bullet を Project ウィンドウにドラッグし、プレハブを作成
  6. ゲームオブジェクト Bullet をシーンから削除
  7. シーンを保存

プレハブ Bullet の[Inspector]ウィンドウはこのようになりました。

[Project]ウィンドウに プレハブ Bullet が追加されました。

スクリプト PlayerController に弾を発射する処理を追加する

次は弾を発射するためにスクリプト PlayerController を修正します。

  1. スクリプト PlayerController を開く
  2. Bullet プレハブを格納するためのパブリックフィールドを 1 つ追加
  3. Bullet Spawn を格納するためのパブリックフィールドを 1 つ追加
  4. Update 関数内に入力処理を追加
  5. 弾を発射するための関数 Fire を追加
  6. スクリプトを保存

出来上がったスクリプトコードにコメントを付けて内容を確認しました。

プレハブ Player の[Inspector]ウィンドウでスクリプトコンポーネントを見るとこのように変数フィールドが追加されました。

プレイヤーオブジェクトに銃を追加する

プレイヤーオブジェクトに弾を発射するための銃を作成します。

  1. プレハブ Player を編集するために、[Hierarchy]ウィンドウにドラッグ
  2. 基本オブジェクトの Cylinder を作成して名前を “Gun” に変更
  3. オブジェクト Gun をオブジェクト Player の子にする
  4. オブジェクト Gun 選択して Capsule Collider コンポーネントを削除
  5. Transform の Position を X 0.5, Y 0.0, Z 0.5 に設定
  6. Transform の Rotation を X 90.0, Y 0.0, Z 0.0) に設定
  7. Transform の Scale をX 0.25, Y 0.5, Z 0.25) に設定
  8. Material を Black に設定

Gun の[Inspector]ウィンドウでTransform のパラメーターはこのようになっています。

プレイヤーオブジェクトに弾発射用オブジェクトを追加する

  1. 空のオブジェクトを 1 つ作成して名前を “Bullet Spawn” に変更
  2. オブジェクト Bullet Spawn をオブジェクト Player の子にする
  3. Bullet Spawn の Position をX 0.5, Y 0.0, Z 1.0) に設定
  4. オブジェクト Player が選択された状態で、[Inspector]ウィンドウ > Prefab > Apply クリック
  5. シーンからオブジェクト Player を削除
  6. シーンを保存
[Project]ウィンドウ]を見るとプレハブ Player のサムネイルが更新されて銃が追加されています。

PlayerController コンポーネントの設定

修正したスクリプト PlayerController で作成した変数フィールがコンポーネントに表示されているので必要なオブジェクトを割り当てます。

  1. プレハブ Player を選択
  2. PlayerController コンポーネントの Bullet Prefab フィールドに Bullet プレハブを追加
  3. PlayerMovement コンポーネントの BulletSpawn フィールドに Bullet Spawn を追加
  4. プロジェクトを保存

Bullet Spawn を ドラッグ&ドロップでフィールドに割り当てるには、[Project]ウィンドウのプレハブ Playerの階層を開いて選択すればOKです。

プレハブ Player の[Inspector]ウィンドウでスクリプトコンポーネントを見るとこのようになりました。

動作確認

ここまでの手順を動作確認するステップです。

  1. スタンドアロンのアプリケーションとして[Build and Run]をクリック
  2. ビルドファイルが完成するとゲームが実行される
  3. ゲーム内 UI から [LAN Host(H)] ボタンをクリックしてホストとしてゲームを開始
  4. Player ゲームオブジェクトを動かして動作を確認
  5. エディタ側でPlay モードを開始
  6. ゲーム内 UI から [LAN Client] ボタンをクリックしてクライアントとしてホストに接続
  7. スタンドアロンプレイヤーを終了し、エディタ側でPlay モードを終了

このステップを終えてゲームを実行。今回はビルドしたゲームを2つ実行してウィンドウを並べました。解説に書いてある通り、ローカル(ホスト)となる自分のゲーム画面(下図では左側)では発射した弾が表示されますが、右側のリモート(クライアント)画面では表示されません。

次のステップでリモート側でも自分の発射した弾が表示されるようにネットワークに対応させる手順になりますが、今回はここまでにしたいと思います。