ネットワーク所有権は、Robloxエンジンの中でも比較的微妙で一般に誤解されやすい側面の一つです。プレイヤーがパートやアセンブリのネットワーク所有権を持っている場合、それらのオブジェクトの物理シミュレーションに対して完全な権限を持ちます。デフォルトでは、サーバーは近くのプレイヤーキャラクターを持つクライアントに対して、アンカーされていないパーツのネットワーク所有権を与え、物理シミュレーションの負荷を分散させます。このシステムは応答性を向上させますが、すべての開発者が理解すべき重要なセキュリティ上の問題を生じさせます。
ネットワーク所有権の理解
クライアントがパーツ(キャラクターを含む)のネットワーク所有権を持っている場合、以下の操作が可能です:
アセンブリ操作:
- 任意の位置にテレポート。
- これは、サーバーが許可する限り、迅速に所有権を取得し、アンカーされていないパーツやアセンブリを自由に操作できるようにするために使用されます。
- 空中移動や速度変更など、動きや状態を操作。
- 攻撃者は自分のHumanoid WalkSpeedを任意の値に設定できます。プロパティは、ローカルスクリプトから読み取れないように、ローカルで変更でき、イベントをトリガーしません。
- 任意のアニメーションを再生し、アニメーションの状態を操作。
- 物理障害物を回避し、衝突を変更。
物理操作
- 任意のアンカーされていないパーツやメカニズムの位置と回転を制御し、InfやNaN成分をCFramesでコピーすることができます。 パーツの速度を極端な値(InfやNaNを含む)に設定し、他のアンカーされていないパーツ/アセンブリの物理に干渉します、これらは攻撃者によって所有されていないものでもです。 これは、他のプレイヤーキャラクターや近くのパーツを投げ飛ばすためにしばしば使用されます。 Touchedイベントの発火を操作し、全く発火しないようにすることができます。
もしあなたのエクスペリエンスがゲームプレイに重要な完全なアンカーされていないパーツやアセンブリを必要とする場合、ネットワーク所有権APIを使用して手動で所有権を設定したり、自動所有権をオフにすることを検討してください。
動きの検証
競技的なエクスペリエンスにおいて、プレイヤーの動きのサーバーサイド検証はシミュレーションの整合性にとって重要です、なぜならクライアントがキャラクターの動きと物理を制御するからです。しかし、さまざまなゲームプレイメカニクスが存在するため、普遍的な解決策はありません。
従来の方法は、複雑なシナリオではしばしば不十分です。単純な時間あたりの距離の計算は、競技的なシューティングゲームでは十分ですが、車両、飛行、または複雑な相互作用を含む物理集約的なエクスペリエンスでは失敗します。検証はネットワーク遅延も考慮する必要があります。
サーバー権限が利用可能になるまで、クライアントサイドの検証を実装する開発者は、効果的なアプローチが劇的に異なることを理解する必要があります。基本的なヒューリスティクスは、不安定な接続を持つ無実のプレイヤーをフラグする可能性があり、単純な速度計算は複雑な動きのシステムを持つエクスペリエンスでは破綻します。位置の更新はインターネットの遅延の影響を受け、時間をかけて平均化する必要があります。多くの開発者は、バースト移動を処理しつつ持続的な違反を防ぐために、リーキーバケツスタイルのアキュムレーターがうまく機能することを発見しています。
実用的な実装は、特定の平面(例えば、地上移動のためのXZ)に動きを投影することが必要で、正当な垂直移動にペナルティを与えず、水平テレポーテーションを検出します。正当なテレポーテーションメカニクスを持つエクスペリエンスでは明示的な除外システムが必要です。検証の頻度、許容レベル、そして執行戦略は、それぞれのエクスペリエンスの具体的な要件に応じて調整されるべきです。