Unity:ローカルプレイヤーの特定~マルチプレイヤーネットワーキングのチュートリアルに挑戦

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

プレイヤーの動きをネットワーク化する

公式サイトのチュートリアルページ プレイヤーの動きをネットワーク化する

今回ステップはプレイヤーオブジェクトを制御するスクリプトを修正し、サーバーとクライアントでゲームオブジェクトとスクリプトがどのように処理されているかについて解説されています。

  1. スクリプト PlayerController を開く
  2. 名前空間 UnityEngine.Networking を追加
  3. MonoBehaviour を NetworkBehaviour に変更
  4. 関数 Update に isLocalPlayer のチェック処理を追加
  5. スクリプトを保存
  6. Project ウィンドウでプレハブ Player を選択し Network > NetworkTransform コンポーネントを追加
  7. プロジェクトを保存

スクリプトコードにコメントを付けて内容を確認しました。今回のスクリプトのポイントは名前空間”using UnityEngine.Networking”の追加とクラス名の後にある”NetworkBehaviour”ですね。

プレハブ Player の[Inspector]ウィンドウはコンポーネント NetworkTransform を追加してこのようになりました。

今回のステップではネットワーキング処理について次のように解説されています。
サーバーが 1 つにクライアントが 2 つある場合、つまり2人のプレイヤーでゲームをプレイする場合、サーバーとクライアントで同時処理されるプレイヤーゲームオブジェクトの数は 6になる。
詳しいことはこれから勉強を進めていきますが、このあたりが リアルタイムネットワークゲーム開発の難しさなのではないか?と感じました。

マルチプレイヤーの動きをテストする

公式サイトのチュートリアルページ マルチプレイヤーの動きをテストする

今回のステップはネットワークマルチプレイヤーネットワーキングの動作確認です。

  1. Build Settingsウィンドウを開き、スタンドアロンのアプリケーションとして[Build and Run]をクリック
  2. ビルドファイルが完成するとゲームが実行される
  3. ゲーム内 UI から [LAN Host ] ボタンをクリックしてホストとして開始
  4. エディタ側で Play モードを開始
  5. ゲーム内 UI から [LAN Client] ボタンをクリックしてクライアントとしてホストに接続
  6. WASD キーまたは方向キーを押してクライアントのプレイヤーオブジェクトの動きをテスト
  7. スタンドアロンプレイヤーに切り替え、ホストのプレイヤーオブジェクトの動きをテスト
  8. スタンドアロンプレイヤーを終了、エディタ側のPlay モードを終了

ゲーム実行中のエディタ側(クライアント)の状態がこちら。

そしてスタンドアロンプレイヤー側(ホスト)の状態がこちら。ちゃんと同期されています。

ただし、このステップの解説にもありますが、自分が操作するプレイヤーオブジェクトの動きがリモート側(クライアントで操作している場合はホスト)でカクカクしていてスムーズに移動できていません。
解説によると…
ネットワークを利用したマルチプレイヤーゲームにおいては、同期を完璧に行うことはできません。
ということで、ゲームは完全に同期されているように印象を与えるためのテクニックを別のチュートリアルで紹介すると書いてあるので、とりあえずこのままにしておきましょう。

ローカルプレイヤーの特定

公式サイトのチュートリアルページ ローカルプレイヤーの特定

今回はプレイヤーが自分のプレイヤーオブジェクトを識別できるようにするために、ホスト側とクライアント側でプレイヤーのマテリアルを変更する処理を追加します。

  1. スクリプト PlayerController を開く
  2. OnStartLocalPlayer 関数を追加してプレイヤーオブジェクトの色を変更する
  3. スクリプトを保存
  4. Build Settingsウィンドウを開き、スタンドアロンのアプリケーションとして[Build and Run]をクリック
  5. ビルドファイルが完成するとゲームが実行される
  6. ゲーム内 UI から [LAN Host ] ボタンをクリックしてホストとして開始
  7. プレイヤーオブジェクトを操作テスト
  8. エディタ側でPlay モードを開始
  9. ゲーム内 UI から [LAN Client] ボタンをクリックしてクライアントとしてホストに接続
  10. プレイヤーオブジェクトを操作テスト
  11. スタンドアロンプレイヤーを終了、エディタ側のPlay モードを終了

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

今回のステップの手順を終えた状態のエディタ側(クライアント)の再生画面はこちら。右側のオブジェクトが自分のプレイヤーオブジェクト。色が青色に変化しています。

そしてスタンドアロンプレイヤー(ホスト)を実行した画面がこちら。左側のオブジェクトが自分のプレイヤーオブジェクト。こちらもちゃんと色が青色に変化しています。