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

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

ノート: UNet は非推奨となり、今後 Unity から削除される予定です。新しいシステムが開発中です。詳細は ブログFAQ を参照してください。

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

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

高レベルスクリプト API

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

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

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

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

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

インターネットサービス

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

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

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

Unity は リアルタイムのトランスポート層 API を含んでいます。以下の機能を提供します。

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

サンプルプロジェクト

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

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