サーバーで実行するとCharacterがActorを透過できなくなる (アクターの境界で振動する)

現在の状況

現在、キーを押すとCharacterのコリジョンプロファイルを切り替え、ワールドに配置されたActorを透過できるように実装しています。(クライアントStandAlone実行では期待した動作になることを確認済み)

ところが、サーバーで実行するとActorを透過できず、ただキャラクターがActorの境界で振動するだけになってしまいます。

サーバー側でも期待通りCharacterがActorを透過できるようにしたいのですが、どうすればいいでしょうか?

環境

Unreal Engine 4.26.2 release (c3caf7b6bf1)

実際の様子と実装

以下動作のgifアニメーションです (5.2MBの制約があるのでQualityを落として撮影しています)

  • クライアント : 期待通り透過している

352122-clientworklow.gif

  • サーバー : 境界で振動している(キーを押さないと振動しなくなる)

352123-servernotworklow.gif

ここでCollision Profileを切り替えています

キャラクターとActorにOnComponentHitを設定し、サーバー側でもコリジョンプリセットの設定がされているか確認しました。
キーを押さない通常状態で衝突するとイベントが発火し、キーを押しながらの透過状態で衝突するとイベントは発火しませんでした。
設定は適用されているようです。

ほかに何か必要な情報があれば、ご提供させていただきたいと思っています。
よろしくお願いいたします。

PIEからDedicated Serverを別プロセスでPlayし、
ClientからOpenLevelしてサーバーマップに接続すると発生します。

サーバとクライアントという語句が入り混じってますが、状況的には以下ですね?

  • クライアント側で実行したCollision無効化処理がサーバ側に反映されていない

クライアント側でいくら処理をしようが、Actorそのものの管理権限はサーバ側にあります
そして位置やプロパティの優先権もサーバ側にあります

今起こっている状況は

  • クライアントではCollisionが無効化されているため、MeshのCollision内に侵入できる
  • クライアントの移動先はサーバに通知されるものの、サーバ側ではCollisionの無効化はされていないため、Collisionによる押し返しが発生する
  • 押し返した結果の位置がクライアントに返され、クライアントはそれを反映する(結果、押し戻される)
  • 上記が繰り返されるため、結果的に振動しているように見える

なので、Collisionに影響を与える場合は、最低限サーバ側で実行する必要があります
ただし、今回の内容を考えると、全クライアントに通知すべきでしょう

T_Sumisaki さん
ご回答ありがとうございます。

ご教示の通り実装したら、意図通り動作させることできました。ありがとうございます。

クライアント側でいくら処理をしようが、Actorそのものの管理権限はサーバ側にあります
そして位置やプロパティの優先権もサーバ側にあります

なるほど、、UEの公式ドキュメントを改めてよく読んでみようと思います。

質問してみて良かったです。いつかまたご回答いただけたら幸いです!