移動同期¶
大多数のリアルタイムマルチプレイヤーゲームでは、位置、方向、速度を同期させて、ワールド内でのプレイヤーの移動を正確に反映する必要があります。
同期にはStrix Replicatorコンポーネントが必要です。これでアクターのプロパティは同期できますが、設定に従って特定の変数のみが同期されます。この中には、Unrealのワールドアクターが持つ既存のトランスフォームと速度のプロパティは含まれません。
これらのプロパティを手動で同期することも可能ですが、Strixはこの目的のためにStrix Movement Synchronizerを提供しています。
Strix Movement Synchronizerコンポーネント¶
注釈
単純な位置同期は、より軽量のStrix Transform Syncコンポーネントにより実行できます。トランスフォームの同期を参照してください。
Strix Movement Synchronizerは、Strix Replicatorコンポーネントを持つ任意のアクターに追加できます。Movement Synchronizerはオーナーの動きに基づいてレプリカアクターの位置と速度を更新します。
予測を行って、オブジェクトを毎フレーム正しい位置までスムーズに移動するよう設計されています。これは移動が速く複雑な動きをするオブジェクトや、遠く離れた場所にいるプレイヤーが操作しているとは思えないような自然な動きが必要な場合に適しています。
このコンポーネントはPawnMovementComponentsを持つポーンで使用するのが最適です。他のアクターでも使用できますが、その場合には警告を生成した上でデフォルトの速度更新から位置更新にフォールバックするため、同期の滑らかさに影響してしまいます。Strix Transform Syncコンポーネント(トランスフォームの同期を参照)よりも性能に負担がかかりますが、動きははるかにスムーズになります。
Movement Synchronizerは、Strix Unreal SDKの中で最も複雑なコンポーネントで、多数の設定があります。移動同期の精度と滑らかさは、アクターの具体的な動き方に依存します。開発者の方には、以下に示す設定を変更してみて、個別のユースケースに最適な値を決定するようお勧めします。Strix Unreal Sampleでは、異なるタイプのアクターに異なる移動設定を行っています。
Near Distance |
float |
現在の場所から目的の場所までの距離の許容誤差です。
これを大きく設定しすぎると、ラバーバンディングが発生する可能性があります。
|
|
Max Speed |
float |
このアクターが移動する最大速度です。
これを小さく設定しすぎると、カクカクした動きになります。
これを大きく設定しすぎると、アクターが不自然に速く動く可能性があります。
|
|
Acceleration |
float |
このアクターの最大加速度です。
これを小さく設定しすぎると、カクカクした動きになります。
これを大きく設定しすぎると、アクターが不自然に速く加速する可能性があります。
|
|
Damping |
float |
スムージング値です。
小さい値を使用すると補間がよりスムーズになり、大きい値を使用すると動きの応答性が低下します。
|
|
Sync Period Min |
int |
更新と更新の間の最小時間(ミリ秒)。
この値が小さいほど更新を行う頻度が増え、結果として移動がより正確になりますが、ネットワーク帯域幅は増加します。
|
|
Sync Period Max |
int |
更新と更新の間の最大時間(ミリ秒)。
この値が小さいほど、静止している間の更新が増えます。
Sync Period Minと組み合わせて使用することで、ほとんど動いていないときのネットワーク性能をいくらか節約できます。
|
|
Reachable Distance |
float |
1回の更新で移動できる最大距離。
この値を小さくしすぎるとアルゴリズムが追いつかなくなるため、カクカクした動きになる可能性があります。
昇り降りの際に見られる動作に注意してください。3次元の動きを2次元空間で同期すると、実際の移動距離はアルゴリズムの想定よりも長距離になります(Unreal EngineのUCharacterMovementComponentのbMaintainHorizontalGroundVelocityの説明を参照してください)。
|
|
Movement Sync Type |
RPCまたはSync Properties |
デフォルトはRPCであり、この場合は更新ティックのたびにRPCによって更新が行われます。
Sync PropertiesではStrix内部の同期ロジックを使用します。
Sync Propertiesではサーバー上に最新の同期データを保持しますが、その結果サーバーの負荷がより高くなります。
|
|
Sync Jump |
bool |
デフォルトではtrueに設定されています。
有効にすると、オリジナルのアクターがジャンプしたときに、このコンポーネントは複製されたアクターのCharacter::Jump()メソッドを呼び出します(ただし、レプリカが落下しているときを除きます)。
これはキャラクターのアクターでのみ機能し、ジャンプの同期を簡単に実装する手段を提供します。ただし、複雑なジャンプロジックを使う場合は、この設定は無効にして、StrixのBlueprint用RPC関数かSync Z Velocityオプション、あるいはその両方を使用した方がいいでしょう。
|
|
Sync X Velocity |
bool |
このオプションはX方向の速度を同期するかどうかを制御します。
デフォルトではtrueに設定されています。X方向へ移動することがない場合は無効にします。
|
|
Sync Y Velocity |
bool |
このオプションはY方向の速度を同期するかどうかを制御します。
デフォルトではtrueに設定されています。Y方向へ移動することがない場合は無効にします。
|
|
Sync Z Velocity |
bool |
このオプションはZ方向の速度を同期するかどうかを制御します。
デフォルトはfalseに設定されています。
通常のゲームではZ方向に重力が作用しています。レプリカも重力の影響を受けるので、Z速度の同期を行わなくてもレプリカは適切に落下したり環境(例えば地形)と相互作用を行ったりします。しかし、ゲームが上下移動を多用していたり、キャラクターが飛行していたり、Z方向のコントロールが可能(例えばジェットパック)だったりする場合には、このオプションを有効にした方がいいでしょう。
|
|
Interpolate Rotation |
bool |
デフォルトではtrueに設定されています。
有効にすると、回転は球面線形補間(SLERP)を使用して補間されます。無効にすると、回転は直接更新されます。
スムーズな回転が不要で、パフォーマンスを若干向上させたい場合は、このオプションを無効にします。
|
|
Send RPC Spawn |
bool |
デフォルトではtrueに設定されています。
有効にすると、このシンクロナイザーを持つアクターがリモートでスポーンされたときに、それの位置を即座に更新します。
|