今回はUnityの公式チュートリアルのマルチプレイヤーネットワーキングを勉強してみました。
Unityの公式サイトからマルチプレイヤーネットワーキングのトップページ をWebサイトのページを開くといきなり英語ばかりで「あ、なんだか難しそうだからやっぱりやめとこ」と一瞬思いました。
しかし、それぞれのステップのページを開くと日本語で解説されているので一安心。
英語タイトルの見出しを、それぞれのページの日本語の見出しに置き換えてみるとこのようになりました。
公式サイトのチュートリアルページ 簡単なマルチプレイヤーサンプルのご紹介
最初のステップはUnityでマルチプレイヤーネットワーキングを使用したゲーム開発についての紹介と、これから進めていくチュートリアルについての概要が書かれています。
まず最初の行う内容は次の2点だけです。
公式サイトのチュートリアルページ ネットワークマネージャー
このステップから具体的な作業に入ります。
ゲームを再生すると[Game]ビューの右上にヘッドアップディスプレイが常時されます。
公式サイトのチュートリアルページ Player プレハブのセットアップ
このステップではプレイヤーキャラクターの作成です。基本オブジェクトを組み合わせてキャラクターを作成してプレハブに変換します。
完成したプレハブ Player の[Inspector]ウィンドウを見るとこのようになります。
公式サイトのチュートリアルページ プレイヤープレハブを登録する
このステップでプレイヤーオブジェクトをネットワークゲームのシーンに登場させる設定を行います。
公式サイトのチュートリアルページ Player の動きを作成する(シングルプレイヤー)
このステップではプレイヤーオブジェクトを制御するためのスクリプトを作成します。
スクリプトコードにコメントを付けて内容を確認しました。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { // ゲーム実行中の繰り返し処理 void Update() { // 左右方向の入力値を変数 x に代入 var x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f; // 前後方向 入力値を変数 z に代入 var z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f; // オブジェクトの方向転換の制御 // (変数 xの値をオブジェクトのY軸回転に代入) transform.Rotate(0, x, 0); // オブジェクトの前進、後退の制御 // (変数 z の値をオブジェクトのZ座標に代入) transform.Translate(0, 0, z); } }[Project]ウィンドウを確認。スクリプトファイルが増えました。
公式サイトのチュートリアルページ プレイヤーの動きをオンラインでテストする
このステップではこれまで作成した内容の動作確認を行います。エディタ上で動作確認を行い、次にゲームのビルドを行ってネットワーキングの動作確認を行います。
はじめにエディタ上でプレイヤーオブジェクトの動きを確認します。
今度はゲームのビルドを行ってゲームを実行します。
ゲームのビルドファイルが完成するビルドしたゲームが自動的に実行されます。ゲーム実行の設定画面が表示されたら解像度は低めということで 720 x 480 にしました。
ゲームが実行されたら [LAN Host(H)] ボタンをクリックすると Windows のセキュリティ警告の画面が表示されたので “プライベートネットワーク” の許可を選択しました。
エディタ側で再生したのと同じようにプレイヤーオブジェクトが表示されて操作できます。
次に、ビルドしたゲームは実行したままで、エディタ側でもゲームを再生してネットワーキングの動作の状態を確認する手順になります。
ビルドしたゲームの方でプレイヤーを移動していた場合、エディタの[Game]ビューでこのように見えます。中央に表示されているのがエディタ側のプレイヤーオブジェクトになります。
キーボードで操作するとスタンドアロンプレイヤー(ホスト)とエディタ側(クライアント)両方のプレイヤーオブジェクトが同時に操作できるのでおかしなことになっています。
今回のステップではホストとクライアントでゲームが実行できることが確認できましたが、プレイヤーオブジェクトの位置が同期されておらずホスト側とクライアント側のプレイヤーで別々に操作できない状態ということが分かりました。
というわけで、次のステップに進みたいところですが、記事が長くなってきたので、チュートリアルの続きのステップは別の記事で紹介したいと思います。