添付画像のようにPawnが地面に埋まっている状況でPawnが地面の上に押し出されたいため、
Pawnにコリジョンを実装し地面(スタティックメッシュ)との押し出しによってアクター自体が上へせりあがってほしいです。
上記を実現するにあたり、
・キャラクターコンポーネントの実装はなしでできるか
・プロパティの設定やコンポーネントの追加などで完結するか?
・物理シミュレーションはなし
上記の要素内で実現できるか把握したいため質問しました。
Pawnのコリジョンとスタティックメッシュのコリジョンレスポンスはブロックで設定しています。
プロパティを設定したりコンポーネントを追加するだけでめり込みの解消処理を行うことはできませんがPawnに対してMovementComponentを実装しているなら、
UMovementComponent::SafeMoveUpdatedComponentを使って重力方向に移動させることでめり込みを解消できると思います。
MovementComponentを設定していないのであれば、重力方向へトレースを行いHitResultにbStartPenetrating立っているようならSafeMoveUpdatedComponentの実装を参考に、貫通を解消する処理を追加できます。
再現プロジェクトありがとうございます。このプロジェクト内にはFloatingPawnMovementが設定されていませんでしたが、こちらで追加したところすり抜ける状態が再現できました。
何故すり抜けるのかを調査したところ、レベルに配置されているアクターのルートコンポーネントのCollisionPresetがOverlapAllに設定されていました。
[Image Removed]作り直しによって問題が解決するのはこのアクターに保存されているOverlapAll設定が削除されているためだと思われます。
ご回答いただきありがとうございます。
こちら参考にさせていただきます。
試しにSafeMoveUpdatedComponentの処理の確認をするため、添付したプロジェクトのポーンにFloatingPawnMovementを付与、MoveUpdateComponentをTickで呼び出し落下させてみたところ、足元に配置されているスタティックメッシュをすり抜けてしまいました。
確認したところ、ポーンの足元とスタティックメッシュが接触した時、UPrimitiveComponent::MoveComponentImpl内のComponentSweepMultiの返し値がfalseになっておりBlockとヒットしていない扱いになっていました。
ただし、Hitsが空ではないためヒットした事実はある用でした。
めり込みの解消のためにBlockとして認知させるためにはどうすればよいでしょうか?
よろしくお願いします。
[Image Removed]
こちら試しにPawn.Uassetと同じコンポーネント構成のUassetを作成して試してみたところ、めり込みの解消が確認できました。
Pawn.Uassetの何が原因で問題が発生したのかと調べてカプセルコリジョンコンポーネントを削除>新規生成すると解消されるまでは特定できたのですが、
カプセルコリジョンコンポーネントの問題が発生するものとしないもののプロパティを比較しても差異が特定できませんでした。
とりあえこちらの"SafeMoveUpdatedComponentの処理の確認をしたい"という質問について確認できる状態になりました。
お手数をおかけして申し訳ございません。
>何故すり抜けるのかを調査したところ、レベルに配置されているアクターのルートコンポーネントのCollisionPresetがOverlapAllに設定されていました。
改めて調べてみたところ、配置済みのCollisionPresetがOverlapAllに設定されているのが原因でした。
>カプセルコリジョンコンポーネントの問題が発生するものとしないもののプロパティを比較しても差異が特定できませんでした。
上記の調べですが、プロパティを比較していたのはポーンのuassetのプロパティ表示で実際に配置済みのポーンに対してはuassetのプロパティの変更を行っても影響が発生しないこと、
コリジョンコンポーネントを削除>生成した場合だとレベルに配置されたポーンのコリジョンも合わせて削除>生成されて一新されること、2点からレベルに配置されたポーンのCollisionPresetがPawnになっているものだと勘違いが起きていました。
以上になります。
改めてこちらのミスでお手数をおかけしてしまい申し訳ございませんでした。
ご対応いただきありがとうございました。