Vehicle と Character の押し合い抑制について

お世話になります。

現在、PhysicsVehicleプラグインとCharacterクラスを利用して実装をしているのですが、
CharacterによってVehicleを簡単に押し出せてしまう現象に困っています。

重いVehicleをCharacterが動かせてしまうのが不自然でゲーム性的にも困るので、解決したいです。

[理想]
・Characterの移動でVehicleが押し出されず、移動しないこと
└Character自体は、Vehicle自体にはぶつかり、Vehicle上を移動する事ができる。

サンプルのプロジェクトを用意しました。
firestorage : 容量無制限の無料オンラインストレージ firestorage
pass : 2x08b

[MyVehicleプロジェクト]
UE4 サンプルのBugyとThirdPersonCharacterを流用
Blueprint’/Game/Vehicles/Vehicle_0/BP_Vehicle_0.BP_Vehicle_0’
Blueprint’/Game/ThirdPersonBP/Blueprints/ThirdPersonCharacter.ThirdPersonCharacter’

操作(360パッド基準)
X:Vehicle付近で乗り降りします。
LT:ブレーキ・バック
RT:アクセル

再現手順
Characterを移動させ、Vehicleのタイヤ付近(四隅)を擦る様に移動すると、Vehicleが引っ張られる様に移動する。

別の方が上げている動画ですが、遭遇しているのは同じ問題な気がしております。

[検証したこと]
CharacterMovementの「Enable Physics Interaction」をOFF

VehicleのMassを極小にしても押せなくなったので少し改善。
ただし上述の問題は残ったまま。


VehilceのMassをとても重くする。
動きにくくはなるが問題は解決していない。
そもそも車の挙動に難が出てきてしまう。


VehicleのMeshのSimulatePhysicsをOFF。
動かなくなるが、現実的な問題として、使用出来ないと思われる。
また誰かが運転しているVehicleはOFFにできないので問題は残ったまま。


VehicleのMeshのコンストレイントの位置・回転をロック。
キャラクターのコリジョンが接触している間、Vehicleがその位置で回転する。
コリジョンが離れるとロックされている向きに戻る。


Vehicleの物理ボディのコリジョンと、CharacterのCapusleのコリジョンが干渉しあってそうなのですが…

アドバイス頂けましたら幸いです。よろしくお願いします。

以下のようにモードを乗っている時と乗っていない時でモードを切り替えるような感じではいかがでしょうか?

  1. Characterが乗っていない時は「VehicleのMeshのSimulatePhysicsはOFF」
  2. Characterが乗った時にイベントグラフで「VehicleのMeshのSimulatePhysicsをON」に変更
  3. Characterが降りたらイベントグラフで「VehicleのMeshのSimulatePhysicsをOFF」に変更

あるいはもっと極端に

  1. Character
  2. 乗っていない場合のVehicle
  3. 乗っている場合のVehicle

のブループリントを別に作り、乗るイベントが発生したら 1、2をDestroyして3をSpawnさせるといった方針でも良いかもしれません。

jgoamakf さん
アドバイスありがとうございます。

SimulatePhysics のon/offは確か試してみたのですが何か問題があったように記憶しています。
(乗車中の車に対して、更に別のキャラクターによる押し合いに負けてしまう)

頂いたアドバイスを元に再考してみます。

SimulatePhysics のon/off を改めて試してみました。
運転する時にonにせざるを得ないので多人数プレイの時に運転手以外のキャラクターで同じ問題は起こってしまいますね。(一定速度以上で轢くのはありますが低速や停車中に…)

接触したときの動作は「物理マテリアル」でもカスタマイズでき、パラメータの
Restitution、Restitution Combine Modeの組み合わせで弾み方が変わりますが、
こちらは試されたでしょうか?

また、ぶつかったらやっぱり車の方が勝つと思うのですが、その場合物理エンジンの
カスタマイズでハマるより、Vehicle側でCharacterをAddImpulseやAddForceを使って
押していくようにプログラミングする方が早いかもしれません。

先ほど私の手元でStatic MeshとCollisionだけのブループリントを作って試してみた
イベントグラフです。参考にしてみてください。

あとは最後の手段(?)かどうか分からないですがUnreal Engine 5では物理エンジンが
一新されるとのことなので、こちらを試しても良いかもしれません。

車についても説明していて「Chaos Vehicles は従来のシステムに比べ多くの改善点があり」と
書いています。

ただし正式版ではないので、将来のリリースではバグ修正の結果だとしても
動きが変わってしまう可能性はあります。

jgoamakf さん
アドバイス色々とありがとうございます!

コリジョンの形状・配置は色々試したりしておりましたが「物理マテリアル」のパラメータ自体の確認は行っておりませんでした。
まずはこちらから挙動を確認して見ようと思います。仰る通りphysicsの調整で何とかならない様でしたらご提案の方向でも検討してみようと思います。

Chaos Vehicles は今のpluginに取り掛かる前に見て、お試し版で回避したので、何とか使用せずに解決を目指したいところですね…

「物理マテリアル」を色々と試してみました。

「Friction」を0、「FrictionCombineMode」をMinかMultiにすると軽く押し出せる現象が抑制出来たように思います。ですが0にしてしまうと横転した時に永久に滑り続けてしまうので、許容しえる小さい値にしています。(Restitution も同様な設定を合わせてする必要があるかもしれません)

キャラクター以外にも衝突の要因があるのでこの設定でもう少し様子をみて見ようと思います。