Version: 2021.2
言語: 日本語
マッチメーカーモードの Network Manager HUD
デバッグ情報

シングルプレイヤーゲームを Unity Multiplayer に変換

重要: UNet は非推奨のソリューションになり、現在、新しい Multiplayer とネットワーキングソリューション (Netcode for GameObjects) が開発中です。詳細は、GameObjects Web サイトの Unity Netcode を参照してください。

ここでは、新しい Unity Multiplayer ネットワークシステムを使用して、シングルプレイヤーゲームをマルチプレイヤーゲームに変換する手順について説明します。 ここで説明するプロセスは、ゲームのために実際に使用する単純化された、より高レベルのプロセスを説明します。 必ずしも、この通りに動作するとは限りませんが、プロセスの基本的な方法を紹介します。

NetworkManager の設定

  • シーンに新しいゲームオブジェクトを追加し、 NetworkManager という名前に変更します。
  • NetworkManager コンポーネントを NetworkManager ゲームオブジェクトに加えます。
  • NetworkManagerHUD コンポーネントをゲームオブジェクトに加えます。 これは、ネットワークゲームの状態を管理するデフォルト UI を提供します。

NetworkManager を使用する を参照してください。

プレイヤー プレハブの設定

  • ゲーム内のプレイヤーゲームオブジェクトのプレハブを検索するか、プレイヤーゲームオブジェクトのプレハブを作成してください。
  • 作成したプレイヤープレハブに NetworkIdentity コンポーネントを加えます。
  • NetworkIdentity の LocalPlayerAuthority にチェックを入れます。
  • Network Manager の Spawn Info セクションで playerPrefab に作成したプレイヤープレハブを設定します。
  • プレイヤーゲームオブジェクトのインスタンスがシーン内に存在する場合は、それをシーンから削除します。

詳しくは プレイヤーオブジェクト を参照してください。

プレイヤーの動き

  • プレイヤープレハブに NetworkTransform コンポーネントを加えます。
  • isLocalPlayer に基づいて入力を更新しスクリプトを制御します。
  • 生成されたプレイヤーと isLocalPlayer を利用するためにカメラを修正します。

例えば、このスクリプトではローカルプレイヤー用の入力のみを処理します。

using UnityEngine;
using UnityEngine.Networking;

public class Controls : NetworkBehaviour
{
    void Update()
    {
        if (!isLocalPlayer)
        {
            // これがローカルプレイヤーでなければ、Update を強制終了
            return;
        }

        // 動きのためのプレイヤー入力を処理
    }
}

基本的なプレイヤーゲーム状態

  • MonoBehaviour の代わりに NetworkBehaviour に重要なデータを含むスクリプトを作成します。
  • SyncVars に重要なメンバー変数を作ります。

詳細はステートの同期を参照してください。

ネットワークによるアクション

  • MonoBehaviour の代わりに NetworkBehaviour に重要なアクションを実行するスクリプトを作成します。
  • 重要なプレイヤーのアクションを実行する関数をコマンドに更新します。

詳細は リモートアクション を参照してください。

ノンプレイヤーゲームオブジェクト

エネミーのようなノンプレイヤーのプレハブを修正します。

  • NetworkIdentify コンポーネントを加えます。
  • NetworkTransform コンポーネントを加えます。
  • 生成可能なプレハブを NetworkManager に登録します。
  • ゲームの状態とアクションでスクリプトを更新します。

オブジェクト生成

  • Spawner スクリプトを NetworkBehaviours に変更します。
  • Modify spawners to only run on the server (use isServer property or the OnStartServer() function)
  • 作成されたゲームオブジェクトの NetworkServer.Spawn() を呼び出します。

プレイヤーの生成位置

  • 新しいゲームオブジェクトを加え、プレイヤーの開始位置に置きます。
  • 新しいゲームオブジェクトに NetworkStartPosition コンポーネントを加えます。

ロビー

  • ロビーのシーンを作成します。
  • ゲームオブジェクトをシーンに加え、NetworkLobbyManager に名前を変えます。
  • 新しいゲームオブジェクトに NetworkLobbyManager コンポーネントを加えます。
  • Manager を設定します。
    • シーン
    • プレハブ
    • Spawner
マッチメーカーモードの Network Manager HUD
デバッグ情報