9-2. NetworkOwnershipと物理演算の関係性

NetworkOwnershipと物理演算の関係性

Roblox開発における物理制御は、NetworkOwnershipの設定に大きく依存します。ここでは、NetworkOwnershipが物理処理にどのように影響を与え、特にプレイヤーやオブジェクトの物理的な操作にどのように関わるか見ていきます。

NetworkOwnershipの役割

NetworkOwnershipは、オブジェクトに対する物理演算の制御権をどこが持つかを決定します。これはサーバーまたはクライアントに設定され、サーバーとクライアントで分散した物理計算が行われます。
クライアントに設定することで、そのクライアントのプレイヤーへの応答性が高い物理的な応答を得ることが可能になります。また計算先の分散により、サーバーのパフォーマンス向上が図れます。

NetworkOwnershipによる影響

特定の物理制御命令は、NetworkOwnershipが有効なサイドでしかそのオブジェクトに効かなくなります。例えば、という力を与えるAPIはNetworkOwnershipが有効なサイドでコールしない限り効果が得られません。同様に物理拘束に対する力(VelocityやTorqueなど)も所有権がある側でコントロールしないと適切な演算が行われません。
このように、NetworkOwnership次第で物理処理用のAPIは正しく使えない、想定した制御結果が得られない、といった状況が起こるため、対象のオブジェクトがサーバー・クライアントどちらに所有されているか、またはどちらに所有するように制御するか、を把握しておく必要があります。

NetworkOwnershipのデフォルトの設定

サーバー所有

デフォルトでは、パーツ等のほとんどのオブジェクトはまずサーバーによって所有されます。これにより、オブジェクトの状態はサーバー上で一元管理され、すべてのクライアントに対して一貫した物理演算結果が適用されます。

クライアント所有

プレイヤーキャラクターと関連するオブジェクト(所持ツールやアクセサリー等)は、デフォルトでそのプレイヤーのクライアントによって所有されます。また、プレイヤーキャラクターに近いパーツはクライアント所有に動的に切り替わります。これにより、プレイヤーが接するオブジェクトはクライアント側で応答性の高い演算結果を得ることができます。

NetworkOwnershipを設定する

NetworkOwnershipはにより手動で明示的な設定が可能です。また、NetworkOwnership設定はそのパーツが接続しているアセンブリ全体に同じ設定がされます(アセンブリについては次項参照)。また、アンカーされているパーツ(とそのアセンブリ)は、必ずサーバー側所有となるルールがあります。
以下がを使用して、乗り物アセンブリに対して、(乗り物制御シート)に乗った運転手プレイヤーを明示的に所有者にするScriptです(公式サンプル)。逆に運転手がいなくなった際にはにより自動的な設定(主にサーバー所有に戻す)に切り替えています。

NetworkOwnership制御の注意点

NetworkOwnershipの設定は、クライアント上でプレイヤーに合わせた制御を可能としたり、プレイヤーにとってレスポンスの高い体験を生み出すことなどに有用です。ただし、クライアントで物理演算をする場合、サーバーで演算結果を検証しないため、不正な物理制御結果をクライアントから送信する、といったチート等の可能性がでることに注意しましょう。
また、NetworkOwnershipは適切に設定しないと、クライアント側、サーバー側どちらかの負荷が高くなりすぎる、といった負荷のバランスを欠いたパフォーマンス低下につながる恐れもあるため、それが適切かどうかを踏まえ設定するようにしましょう。

参照すべき情報