Version: 2017.2
ネットワーキングの概要(旧)
ネットワークビュー(旧)

Unity でのネットワーキング要素(旧)

(Unity 5.1 からは UNET の使用を推奨しています。下記の情報は旧ネットワークシステムのものです。)

Unity のネイティブなネットワーキングは、前のページで説明位したものすべてをサポートしています。サーバー作成およびクライアント接続、接続されたクライアント間でのデータの共有、どのプレイヤーがどのオブジェクトをコントロールするか、ネットワーク設定のバリエーションはすべて、直ぐに使える形でサポートされます。このページでは、これらのネットワーキング作業の Unity 固有の Unity の実装について説明します。

サーバーの作成

ネットワークゲームのプレイを開始する前に、通信する各種コンピューターを決定する必要があります。これを行うには、サーバーを作成する必要があります。サーバーは、ゲームも実行しているマシンであったり、ゲームに参加している専用のマシンでもあります。サーバーを作成するには、スクリプトから Network.InitializeServer() を呼び出します。クライアントとして、既存のサーバーに接続したい場合は、代わりに Network.Connect()を呼び出します。

一般的に、Network class 全体に習熟するのに非常に便利なのが分かります。

ネットワークビューを使用しての通信

Network View は、ネットワーク上でデータを送信するコンポーネントです。ネットワークビューにより、GameObject は RPC コールまたは状態同期を使用してデータを送信できます。ネットワークビューの使用方法は、ゲームのネットワーキング動作がどのように機能するかを決定します。ネットワークビューにはほとんどオプションはありませんが、ネットワークゲームにとっては非常に重要です。

ネットワークビューの使用に関する詳細は、ネットワークビューガイド(旧) および ネットワークビュー を参照してください。

リモートプロシージャコール

リモートプロシージャコール (RPC) は、ネットワークビューを含む GameObject に追加されるスクリプトで宣言される関数です。 ネットワークビューは、RPC 関数を含むスクリプトを示す必要があります。次に、その GameObject 内のスクリプトから、RPC 関数を呼び出すことができます。

Unity での RPC の使用に関する詳細については、RPC の詳細(旧) を参照してください。

ステートの同期

状態同期は、すべてのゲームクライアント上でデータを継続的に共有します。このように、プレイヤーの位置をすべてのクライアント上で同期できるので、データが実際ネットワーク上で配信される際に、ローカルでコントロールされているように見えます。GameObject 内で状態を同期させるには、そのオブジェクトにネットワークビューを追加し、何を観察するかを伝える必要があります。観測されたデータはが、ゲーム内のすべてのクライアント上で同期されます。

Unity での状態同期の使用に関する詳細については、状態同期の詳細(旧) を参照してください。

Network.Instantiate()

Network.Instantiate() により、ナチュラルで簡単な方法ですべてのクライアント上のプレハブをインスタンス化できます。基本的に、これは、Instantiate() ですが、すべてのクライアント上でのインスタンス化を実行します。

内部では、Network.Instantiate は、すべてのクライアントで実行される単にバッファされた RPC コールにすぎません (ローカルでも)。NetworkViewID を割り当て、すべてのクライアント上で同期させるインスタンス化プレハブに割り当てます。

詳細については、ネットワークのインスタンス化(旧) ページを参照してください。

NetworkLevelLoad()

データの共有、クライアントプレイヤーの状態、レベルのロードなどの処理は若干難しい場合があります。ネットワークレベルロード(旧) ページに、このタスクの管理のための便利なサンプルが用意されています。

マスターサーバー

Master Server はゲームを一致させるのに便利です。マスターサーバーに接続したいサーバーを起動する際、マスターサーバーはすべてのアクティブなサーバーのリストを提供します。

Master Server は、サーバーとクライアントの出会いの場で、ここではサーバーが宣伝され、互換性のあるクライアントは実行されているゲームに接続できます。これにより、関与するすべてのパーティに対して IP アドレスを調整する必要がなくなります。これは、ユーザーが、通常の状況下ではこれが必要とされるルーターに干渉せずに、ゲームのホストとなることもできます。これは、クライアントがサーバーのファイアウォールをバイパスして、パブリックインターネットを通じて、通常はアクセスできないプライベートの IP アドレスに到達するのに役に立ちます。これは、接続の確立を 容易にする ファシリテータにより行われます。

詳細については、マスターサーバー(旧) ページを参照してください。

帯域幅の最小化

最小の帯域幅を使用して、ゲームを正しく実行させることは重要です。各種データ送信方法、何を または いつ 送信するかを決める各種手法および好きな様に使用できるその他の手法があります。

使用される帯域幅を減らすためのヒントおよび手法については、ネットワーク帯域幅の最小化(旧) を参照してください。

ネットワークゲームのデバッグ

Unity には、ネットワークゲームのデバッグを支援するいくつかの機能が用意されています。

  1. ネットワークマネージャー を使用して、すべての入出するネットワークトラフィックをログできます。
  2. インスペクターおよび階層ビューを効率的に使用すれば、オブジェクト作成の追跡やビュー ID の検査などを行うことができます。
  3. Unity を同じマシン上で 2 回起動でき、それぞれで異なるプロジェクトを開くことができます。Windows 上で、これは、別の Unity インスタンスを起動し、プロジェクトウィザードからプロジェクトを開くだけで行うことができます。Mac OS X では、複数の Unity インスタンスを端末から開くことができ、-projectPath 引数を指定できます。 /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath “/Users/MyUser/MyProjectFolder/” /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath “/Users/MyUser/MyOtherProjectFolder/”

例えば、1 度に実行しているインスタンスが 2 つある場合、1 つにはフォーカスがあるため、ネットワーキングのデバッグ時に、バックグラウンドでプレイヤーに実行させます。これにより、ネットワーキングのループが断たれ、望まない結果が生じます。これは、エディターの Edit->Project Settings->Player か、Application.runInBackground で有効にできます。

ネットワーキングの概要(旧)
ネットワークビュー(旧)