| | |—| | Note: UNet is deprecated, and will be removed from Unity in the future. A new system is under development. For more information and next steps see this blog post.| Unity のマルチプレイヤー HLAPI システムは、プレイヤーゲームオブジェクトをノンプレイヤーゲームオブジェクトと区別して扱います。新しいプレイヤーがゲームに参加すると (新しいクライアントがサーバーに接続すると)、そのプレイヤーのゲームオブジェクトはそのプレイヤーのクライアント上の「ローカルプレイヤー」ゲームオブジェクトになります。Unity はプレイヤーの接続とプレイヤーのゲームオブジェクトとを関連付けます。Unity は、ゲームをプレイしているそれぞれに 1つのプレイヤーゲームオブジェクトを関連付け、ネットワーキングコマンド を個々のゲームオブジェクトにルーティングします。プレイヤーは他のプレイヤーのゲームオブジェクト上で コマンド を呼び出すことはできません。自身のゲームオブジェクト上でのみ可能です。
NetworkBehaviour クラス (このクラスから派生させてネットワークスクリプトを作成します) には、isLocalPlayer というプロパティがあります。各クライアントのプレイヤーゲームオブジェクトに対し、Unity は NetworkBehaviour スクリプトの isLocalPlayer プロパティを true に設定し、OnStartLocalPlayer() コールバックを呼び出します。つまり、各クライアントにこのようにして設定された異なるゲームオブジェクトがある、ということです。各クライアント上のこの異なるゲームオブジェクトがローカルプレイヤーを表しています。下の図は、2 つのクライアントとそのローカルプレイヤーを示しています。
プレイヤーとしての「自分」を表すプレイヤーゲームオブジェクトだけに isLocalPlayer
フラグが設定されます。通常、このフラグをスクリプトに設定して、入力を処理するかどうか、カメラにこのゲームオブジェクトを追跡させるかどうか、または、他のクライアントに属するプレイヤーにのみ発生する他のクライアント側の処理を行うかどうかを決定します。
プレイヤーゲームオブジェクトは、サーバー上でプレイヤー (すなわち、ゲームをプレイしている人物) を表し、プレイヤーのクライアントからコマンドを実行する能力を持っています。これらのコマンドは、クライアントからサーバーへの保護された リモートプロシージャーコール です。この サーバー権限システム では、サーバー側の他のノンプレイヤーゲームオブジェクトは、クライアント側のゲームオブジェクトから直接コマンドを受け取ることができません。これは、セキュリティのためと、ゲーム構築の複雑さを軽減するためです。ユーザーが入力したコマンドをプレイヤーゲームオブジェクトを通してルーティングすることにより、これらのメッセージが適切な場所、適切なクライアントから受信されていることを確認し、中央にあるサーバーで処理することができます。
Network Manager は、クライアントがサーバーに接続するたびにプレイヤーを追加します。ただし、場合によっては、ユーザーがコントローラーの「開始」ボタンを押すなどの入力イベントが発生するまで、プレイヤーを追加したくないことがあります。自動的なプレイヤーの作成を無効にするには、Network Manager コンポーネントのインスペクターに移動し、Auto Create Player を無効にします。