(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() により、ナチュラルで簡単な方法ですべてのクライアント上のプレハブをインスタンス化できます。基本的に、これは、Instantiate() ですが、すべてのクライアント上でのインスタンス化を実行します。
内部では、Network.Instantiate は、すべてのクライアントで実行される単にバッファされた RPC コールにすぎません (ローカルでも)。NetworkViewID を割り当て、すべてのクライアント上で同期させるインスタンス化プレハブに割り当てます。
詳細については、ネットワークのインスタンス化(旧) ページを参照してください。
データの共有、クライアントプレイヤーの状態、レベルのロードなどの処理は若干難しい場合があります。ネットワークレベルロード(旧) ページに、このタスクの管理のための便利なサンプルが用意されています。
Master Server はゲームを一致させるのに便利です。マスターサーバーに接続したいサーバーを起動する際、マスターサーバーはすべてのアクティブなサーバーのリストを提供します。
Master Server は、サーバーとクライアントの出会いの場で、ここではサーバーが宣伝され、互換性のあるクライアントは実行されているゲームに接続できます。これにより、関与するすべてのパーティに対して IP アドレスを調整する必要がなくなります。これは、ユーザーが、通常の状況下ではこれが必要とされるルーターに干渉せずに、ゲームのホストとなることもできます。これは、クライアントがサーバーのファイアウォールをバイパスして、パブリックインターネットを通じて、通常はアクセスできないプライベートの IP アドレスに到達するのに役に立ちます。これは、接続の確立を 容易にする ファシリテータにより行われます。
詳細については、マスターサーバー(旧) ページを参照してください。
最小の帯域幅を使用して、ゲームを正しく実行させることは重要です。各種データ送信方法、何を または いつ 送信するかを決める各種手法および好きな様に使用できるその他の手法があります。
使用される帯域幅を減らすためのヒントおよび手法については、ネットワーク帯域幅の最小化(旧) を参照してください。
Unity には、ネットワークゲームのデバッグを支援するいくつかの機能が用意されています。
例えば、1 度に実行しているインスタンスが 2 つある場合、1 つにはフォーカスがあるため、ネットワーキングのデバッグ時に、バックグラウンドでプレイヤーに実行させます。これにより、ネットワーキングのループが断たれ、望まない結果が生じます。これは、エディターの Edit->Project Settings->Player か、Application.runInBackground で有効にできます。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.