Unity Mirror 入門 (1) - 事始め
Unity Mirrorの使い方をまとめました。
1. Mirror
「Mirror」は、Unityゲームでマルチプレイヤー機能を実装するためのシステムです。
2. Mirrorの用語
◎ サーバーとクライアント
Mirrorを実装したアプリは、「サーバー」「クライアント」のいずれかになります。
サーバーは、「専用サーバー」「ホストサーバー」のいずれかになります
◎ ローカルクライアントとリモートクライアント
クライアントは、「ローカルクライアント」「リモートクライアント」のいずれかになります。
◎ インスタンス化とスポーン
◎ プレイヤーとローカルプレイヤー
3. 開発環境の準備
開発環境の準備の手順は、次のとおりです。
(1) Unityの準備。
Unity2019 LTS推奨で、全ての最新のLTSバージョンでも機能します。
(2) AssetStoreから「Mirror」をインポート。
4. NetworkManagerの準備
はじめに、「NetworkManager」を準備します。
(1) 空のGameObjectを作成し、「NetworkManager」と名前を指定。
(2) 「NetworkManager」に「Add Component」で「NetworkManager」と「NetworkManagerHUD」
この時点で実行すると、ホスト・クライアント・サーバを選択する簡易UIが表示されます。
5. プレイヤーの準備
次に、「プレイヤー」を準備します。
(1) 「Sphere」を追加し、Add Component」で「Rigidbody」を追加し、「Use Gravity」のチェックを外す。
(2) 「Sphere」に「Add Component」で「NetworkIdentity」と「NetworkTransform」を追加。
(3) 「Sphere」に「Add Component」で新規スクリプト「PlayerControl」を追加
using UnityEngine;
using Mirror;
public class PlayerControl : NetworkBehaviour
{
// 定期更新時に呼ばれる
void FixedUpdate()
{
// ローカルプレイヤーの時
if (isLocalPlayer) {
// 操作
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
CmdMoveSphere(x, z);
}
}
// 球の移動
[Command]
void CmdMoveSphere(float x, float z)
{
Vector3 v = new Vector3(x, 0, z) * 5f;
GetComponent<Rigidbody>().AddForce(v);
}
}
◎ NetworkBehaviour
サーバー・クライアント間で同期するオブジェクトが継承するクラスです。
◎ ローカルプレイヤーかどうか
ローカルプレイヤーかどうかは、以下で確認します。
◎ コマンド
NetworkBehaviourの「Cmd」ではじまるメソッドに[Command]タグを付加することで、クライアントから呼ばれた時、サーバー上で実行されるメソッドとして指定できます。
処理の流れは、次のようになります。
[Command]メソッドで渡せる引数のデータ型は、次のとおりです。
(4) 「Sphere」をProjectウィンドウにドラッグ&ドロップしてプレハブ化し、Hierarchyウィンドウの「Shape」を削除。
(5) 「NetworkManager」の「Player Prefab」に「Sphere」プレハブを設定。
6. 実行
実行手順は、次のとおりです。
(1) アプリをビルドして実行し、「Host」ボタンを押す。
(2) Unityエディタを実行し、「Client」ボタンを押す。
方向キーで球を移動させ、位置が同期することを確認します。
次回
この記事が気に入ったらサポートをしてみませんか?