高レベルネットワークAPIの使用
ARDKに搭載されている高レベルネットワークAPIで分散型のステートフルゲームプレイを素早く作成する。
はじめに
MultipeerNetworkingインターフェイスでオブジェクトの位置を複製する最も簡単な方法を想像してください。おそらく、位置 Vector3
を byte[]
にシリアライズし、その byte[]
に特定のタグを付けて送信し、受信側でそのタグをリッスンして Vector3
をデシリアライズする方法が思い浮かぶでしょう。2つのオブジェクトをサポートできるようにこのパターンを拡張するには、別のタグ(またはターゲットを指定するために byte[]
にプレフィックスを付加すること)が必要です。寿命の異なる数千のオブジェクトへの拡張や、フィールドの追加(色や名前が各オブジェクトに割り当てられる)、オブジェクトの所有権(操作できるピアや、更新が表示されるユーザー)の設定についてはどうでしょうか。
高レベルネットワークAPI(Hlapi)は、MultipeerNetworkingインターフェイスの上に位置するネットワーク層で、階層的なアドレス指定スキームによってこれらの問題を解決しています。各ネットワークオブジェクトはNetworkIdタグを持つNetworkGroupインターフェイスとして表され、各 NetworkGroup
には、任意の数のNetworkedDataHandlerが含まれてます。これらは文字列として識別され、実際のデータハンドラとしての役割を担います(たとえば、接続しているゲームオブジェクトの現在位置を送信したり、受信データを使用して位置を更新するなど)。中間クラス(HlapiSessionや NetworkGroup
など)では、アドレス指定やキャッシュ保存、データのシリアライズといったネットワークの問題に対処します。
機能
このアーキテクチャを念頭に、Hlapiにはマルチプレイの構築を素早く開始するための機能がいくつか搭載されています。
ネットワークスポーン/デスポーン : ネットワーク化されたGameObjectに相当するNetworkedUnityObjectとしてオブジェクトを登録し、1回のAPIコールでセッション内のすべてのピアに対してそのオブジェクトをスポーン(またはデスポーン)します。
権限者: ネットワーク上のデータの所有権を定義することで、すべてのピアがオブジェクトのデスポーン、特定のフィールドへの書き込み、それらのフィールドの更新のリッスンなどを許可するユーザーと一致します。
ネットワーク型変換: NetTransformをGameObjectにドラッグアンドドロップすると、Hlapiに自動的に接続され、オブジェクトに対する権限を持つピアは、ネットワークセッション内の他のすべてのピアのためにその変換を操作できるようになります。
一般的なネットワーク分野: NetworkedField <T> を構築し、ネットワークセッション内の他のピアに汎用値の更新を自動的に伝搬させることができます。
メッセージストリーム: MessageStreamReplicator <T> を使用して、未加工のバイトメッセージの代わりに
T
型のオブジェクトをストリームで送受信します。