ノート: UNet は非推奨となり、今後 Unity から削除される予定です。新しいシステムが開発中です。詳細は ブログ と FAQ を参照してください。 |
Unity の高レベル API (HLAPI) システムで、マルチプレイヤーゲームには以下が含まれます。
サーバー: サーバー (1 つ) は、一緒にプレイしたいときに、すべてのプレイヤーが接続する 1 つのゲームのインスタンスです。サーバーはしばしば、スコアの記録などゲームの様々な面を管理し、データをクライアントに伝えます。
クライアント: 通常、クライアントはゲームのインスタンスで、異なるコンピューターからサーバーへ接続します。クライアントはローカルネットワーク、または、オンラインを通して接続できます。
クライアント は サーバー に接続するゲームのインスタンスです。それによって、ゲームをプレイする人はそれぞれのクライアントで接続するその他の人と一緒にプレイできます。
サーバーは、「専用サーバー」または「ホストサーバー」のいずれかです。
専用サーバー: サーバーとしてのみ実行されるゲームのインスタンスです。
ホストサーバー: 専用サーバーがないときに、クライアントの 1 つがサーバーの役割を兼ねます。このクライアントは「ホストサーバー」と呼ばれます。ホストサーバーは、サーバーとクライアント両方の役割をするゲームのインスタンス (ホストと呼ばれます) を 1 つ作成します。
下の図は、マルチプレイヤーゲームの 3 人のプレイヤーを表しています。このゲームでは、1 つのクライアントがホストの役割も果たします。つまり、クライアント自身が「Local Client」であり、Local Client は Host Server に接続し、両方が同じコンピュータ上で実行されます。 他の 2 人のプレーヤーは Remote Client です。つまり、彼らは Host Server に接続する別々のコンピューター上にあります。
ホストはゲームの 1 つのインスタンスであり、同時に サーバー と クライアント の両方として動作します。ホストは、ローカルクライアント通信のために特別な種類の内部クライアントを使用し、他のクライアントはリモートクライアントです。ローカルクライアントは、同じプロセス内にあるため、直接の関数の呼び出しとメッセージのキューを通してサーバーと通信します。それは実際にサーバーとシーンを共有します。 リモートクライアントは、通常のネットワーク接続を通してサーバーと通信します。Unity の HLAPI を使用すると、これらはすべて自動的に処理されます。
マルチプレイヤーシステムの目的の 1 つは、ローカルクライアントとリモートクライアントのコードが同じであるため、ゲームを開発するときに、大抵は、1 タイプのクライアントを考えるだけですみます。多くの場合、Unity はこの違いを自動的に処理するので、ローカルクライアントまたはリモートクライアントで実行されているコードの違いについて考える必要はほとんどありません。
Unity でシングルプレイヤーゲームを作成する場合、ランタイムに新しいゲームオブジェクトを作成するためには GameObject.Instantiate
メソッドを使用します。しかし、マルチプレイヤーシステムでは、ネットワーク化した内でゲームオブジェクトをアクティブにするために、サーバー自体がゲームオブジェクトを「生成」する必要があります。サーバーがゲームオブジェクトを生成すると、接続したクライアント上でゲームオブジェクトの作成がトリガーされます。生成システムはゲームオブジェクトのライフサイクルを管理しており、ゲームオブジェクトの設定方法に基づいて、その状態を同期させます。
ネットワークによるインスタンス化と生成についての詳細は、ゲームオブジェクトの生成 に関するドキュメントを参照してください。
Unity のマルチプレイヤー HLAPI システムは、プレイヤーのゲームオブジェクトをノンプレイヤーのゲームオブジェクトと区別して扱います。新しいプレイヤーがゲームに参加すると (新しいクライアントがサーバーに接続すると)、そのプレイヤーのゲームオブジェクトはそのプレイヤーのクライアント上の「ローカルプレイヤー」ゲームオブジェクトになります。Unity はプレイヤーの接続とプレイヤーのゲームオブジェクトとを関連付けます。Unity は、ゲームをプレイしている各人に 1つのプレイヤーゲームオブジェクトを関連付け、ネットワークグコマンド を個々のゲームオブジェクトにルーティングします。プレイヤーは他のプレイヤーのゲームオブジェクト上で コマンド を呼び出すことはできません。自身のゲームオブジェクト上でのみ可能です。
詳細は、プレイヤーゲームオブジェクト を参照してください。
サーバーとクライアントはどちらもゲームオブジェクトの挙動を管理できます。「権限」の概念は、ゲームオブジェクトがどのように管理されているかを意味します。Unity の HLAPI はデフォルト状態では、サーバー (ホスト) がプレイヤー以外のすべてのゲームオブジェクトに対する権限を持つ「サーバー権限」に基づいています。ます。 プレイヤーゲームオブジェクトは特別なケースであり、 「ローカル権限」を持つものとして扱われます。異なる権限システムを使用してゲームを構築することができます。詳細は、ネットワーク権限 を参照してください。