Version: 2018.2
ネットワーク化されたゲームオブジェクト
カスタムのプレイヤースポーン (Spawning)

プレイヤーゲームオブジェクト

Unity のマルチプレイヤー HLAPI システムは、プレイヤーゲームオブジェクトをノンプレイヤーゲームオブジェクトと区別して扱います。新しいプレイヤーがゲームに参加すると (新しいクライアントがサーバーに接続すると)、そのプレイヤーのゲームオブジェクトはそのプレイヤーのクライアント上の「ローカルプレイヤー」ゲームオブジェクトになります。Unity はプレイヤーの接続とプレイヤーのゲームオブジェクトとを関連付けます。Unity は、ゲームをプレイしているそれぞれに 1つのプレイヤーゲームオブジェクトを関連付け、ネットワーキングコマンド を個々のゲームオブジェクトにルーティングします。プレイヤーは他のプレイヤーのゲームオブジェクト上で コマンド を呼び出すことはできません。自身のゲームオブジェクト上でのみ可能です。

NetworkBehaviour クラス (このクラスから派生させてネットワークスクリプトを作成します) には、isLocalPlayer というプロパティーがあります。各クライアントのプレイヤーゲームオブジェクトに対し、Unity は NetworkBehaviour スクリプトの isLocalPlayer プロパティーを true に設定し、OnStartLocalPlayer() コールバックを呼び出します。つまり、各クライアントにこのようにして設定された異なるゲームオブジェクトがある、ということです。各クライアント上のこの異なるゲームオブジェクトがローカルプレイヤーを表しています。下の図は、2 つのクライアントとそのローカルプレイヤーを示しています。

この図の中で、円は各クライアントのローカルプレイヤーであるプレイヤーゲームオブジェクトを表しています
この図の中で、円は各クライアントのローカルプレイヤーであるプレイヤーゲームオブジェクトを表しています

プレイヤーとしての「自分」を表すプレイヤーゲームオブジェクトだけに isLocalPlayer フラグが設定されます。通常、このフラグをスクリプトに設定して、入力を処理するかどうか、カメラにこのゲームオブジェクトを追跡させるかどうか、または、他のクライアントに属するプレイヤーにのみ発生する他のクライアント側の処理を行うかどうかを決定します。

プレイヤーゲームオブジェクトは、サーバー上でプレイヤー (すなわち、ゲームをプレイしている人物) を表し、プレイヤーのクライアントからコマンドを実行する能力を持っています。これらのコマンドは、クライアントからサーバーへの保護された リモートプロシージャーコール です。この サーバー権限システム では、サーバー側の他のノンプレイヤーゲームオブジェクトは、クライアント側のゲームオブジェクトから直接コマンドを受け取ることができません。これは、セキュリティのためと、ゲーム構築の複雑さを軽減するためです。ユーザーが入力したコマンドをプレイヤーゲームオブジェクトを通してルーティングすることにより、これらのメッセージが適切な場所、適切なクライアントから受信されていることを確認し、中央にあるサーバーで処理することができます。

Network Manager は、クライアントがサーバーに接続するたびにプレイヤーを追加します。ただし、場合によっては、ユーザーがコントローラーの「開始」ボタンを押すなどの入力イベントが発生するまで、プレイヤーを追加したくないことがあります。自動的なプレイヤーの作成を無効にするには、Network Manager コンポーネントのインスペクターに移動し、Auto Create Player を無効にします。

ネットワーク化されたゲームオブジェクト
カスタムのプレイヤースポーン (Spawning)