シングルプレイヤーゲームをマルチプレイへ変換する
このページでは、新しいネットワーキングシステムを利用してシングルプレイヤーゲームをマルチプレイヤーゲームに変換する手順を説明しています。ここでご紹介する手順は簡素化された大まかなものであり、実際のゲーム用にこのとおりに行って、うまく行くとは限りませんが、基本的な方法はご理解いただけるでしょう。
NetworkManager の設定
- 新規ゲームオブジェクトをシーンに追加し、“NetworkManager” へと名前を変更します。
- NetworkManager コンポーネントを新規作成したゲームオブジェクトに追加します。
- NetworkManagerHUD コンポーネントをゲームオブジェクトに追加します。これによりネットワークゲームの状態を管理するためのデフォルト UI が提供されます。
NetworkManager を使用する を参照してください。
プレイヤー プレハブの設定
- ゲーム内にあるプレイヤーオブジェクトのプレハブを見付けます。またはプレイヤーオブジェクトからプレハブを作成します。
- NetworkIdentity コンポーネントをプレイヤー プレハブに追加します。
- NetworkIdentity で LocalPlayerAuthority ボックスにチェックを入れます。
- NetworkManager の “Spawn Info” セクションの playerPrefab にプレイヤー プレハブを設定します。
- シーンにプレイヤーオブジェクト インスタンスがある場合はそれを削除します。
プレイヤーオブジェクト を参照してください。
プレイヤーの動き
- NetworkTransform コンポーネントをプレイヤー プレハブに追加します。
- 入力および制御スクリプトを、isLocalPlayer を考慮するように更新します。
- オブジェクト生成されたプレイヤーおよび isLocalPlayer を使用してカメラを修正します。
例えば、このスクリプトではローカルプレイヤー用の入力のみを処理します。
using UnityEngine;
using UnityEngine.Networking;
public class Controls : NetworkBehaviour
{
void Update()
{
if (!isLocalPlayer)
{
// exit from update if this is not the local player
return;
}
// handle player input for movement
}
}
基本的なプレイヤーの状態
- MonoBehaviour の代わりに NetworkBehaviour を継承したスクリプトを作成します。
- 重要な変数に SyncVars 属性を付けます。
詳細はステートの同期を参照してください。
ネットワークアクション
- MonoBehaviour の代わりに NetworkBehaviour を継承した重要なアクションを実行するスクリプトを作成します。
- コマンドで重要なプレイヤーアクションを実行して更新する関数を呼び出します。
詳細はリモートアクションを参照してください。
ノンプレイヤー オブジェクト
エネミーのようなノンプレイヤーのプレハブを修正していきます。
- NetworkIdentify コンポーネントを追加します。
- NetworkTransform コンポーネントを追加します。
- NetworkManager に生成するプレハブを登録します。
- ゲームの状態とアクションのスクリプトを更新します。
オブジェクト生成
- オブジェクト生成スクリプトを NetworkBehaviour に変更します。
- isServer プロパティーまたは OnStartServer() 関数を使用して、サーバー上でのみオブジェクトを生成するように変更します。
- オブジェクトを作成するために NetworkServer.Spawn() を呼び出します。
プレイヤーの生成位置
- 新規のゲームオブジェクトを追加し、プレイヤーの開始位置を設定します。
- 新規のゲームオブジェクトに NetworkStartPosition コンポーネントを追加します。
ロビー
- ロビーのシーンを作成します。
- multiplayer-lobby パッケージをインポートします。
- GuiLobbyManager プレハブをシーンに追加します。
- マネージャーの設定を行います。