Version: 2022.3
言語: 日本語
マルチプレイヤーとネットワーク
マルチプレイヤープロジェクトの設定

マルチプレイヤーゲーム作成の概要

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

ユーザーの目的に応じて、ネットワーク機能には 2種類あります。

  • Unity でマルチプレイヤーゲームを作成することができます。これにはまず、NetworkManager や 高レベル API が必要です。
  • ネットワークインフラや高度なマルチプレイヤーゲームを構築します。これにはまず、NetworkTransport API が必要です。

高レベルスクリプト API

Unity のネットワークには “高レベル” なスクリプト API (Unity では、HLAPI と呼びます) があります。このスクリプト APIを使用することで “低レベル” な実装の詳細を気にすることなく、マルチプレイヤーゲームの一般的な要件を含むコマンドのほとんどにアクセスできます。以下は HLAPI の概要です。

  • Network Manager を使用して、ゲームの通信状態を制御します。
  • ホストがプレイヤークライアントでもある “クライアントホスト” のゲームを操作します。
  • 汎用シリアライザーを使用してデータをシリアライズします。
  • ネットワークメッセージの送受信をします。
  • クライアントからサーバーにネットワーク用のコマンドを送信します。
  • サーバーからクライアントにリモートプロシージャコール (RPC) を行います。
  • サーバーからクライアントにネットワーク用のイベントを送信します。

エンジンとゲームエディターの統合

Unity のネットワークは、ゲームエンジンとエディターに統合されました。これにより、コンポーネントやビジュアルツールを使い、マルチプレイヤーゲームを作成できるようになりました。以下の機能が提供されます。

  • 通信状態のオブジェクトの NetworkIdentity コンポーネント
  • ネットワーク対応のスクリプトの NetworkBehaviour
  • オブジェクトの Transform の自動同期
  • スクリプト変数の自動同期
  • シーン上でネットワーク越しにオブジェクトを配置するサポート
  • Network コンポーネント

インターネットサービス

Unity は、製作とリリースを通してゲームをサポートするために、以下を含むインターネットサービスを提供します。

  • マッチメイキングサービス
  • マッチの作成と公開
  • 参加可能なマッチのリストアップ
  • リレーサーバー
  • 非専用サーバーによるインターネットを通じたゲームプレイ
  • マッチに参加しているプレイヤーへのメッセージのルーティング

NetworkTransport (リアルタイムトランスポート層)

Unity には、以下の機能を提供するリアルタイムのトランスポート層があります。

  • 最適化した UDP ベースのプロトコル
  • Head of Line Blocking (HoLB、行頭ブロッキング) の問題を回避するためのマルチチャンネル設計
  • 各チャネルの様々なレベルのサービス品質 (QoS) に対応するサポート
  • P2P やクライアント/サーバーアーキテクチャをサポートする柔軟性のあるネットワークトポロジー

認証

Unity のネットワークはシンプルな組み込みの認証機能を実装し、セッションを検証するための基本的なサポートを提供しますが、堅牢な認証ソリューションではありません。

堅牢な認証は、悪意のあるユーザーによるプレイヤーセッションの乗っ取り、他のユーザーのなりすまし、正規のプレイヤーのゲームからの切断など、ゲームやアプリケーションに特有の悪質な行為を防ぐことができるため、マルチプレイヤープロジェクトの開発において重要な要素です。

Unity は簡易なビルトインの認証しか提供しないため、ゲームやアプリケーションで悪意ある行為に対する強固な保護が必要な場合は、サードパーティの認証と暗号化ソリューションを使用するか、この参考実装 や NetworkTransport API などのプラグインを使用して自身で実装する必要があります。

サンプルプロジェクト

これらの機能の活用方法を調べるために、マルチプレイヤーゲームのサンプルプロジェクトを詳しく研究することもできます。 Unity のフォーラム には以下のサンプルプロジェクトがあります。

  • マルチプレイヤーゲームサンプル 2D Tanks
  • マッチメイキング付きマルチプレイヤーゲーム Invaders
  • マッチメイキング付きマルチプレイヤーゲーム 2D Space Shooter
  • 必要最低限のマルチプレイヤーゲームプロジェクト
マルチプレイヤーとネットワーク
マルチプレイヤープロジェクトの設定