複数のPhysicalMaterialを受けられないという問題

PhysicalMaterialの設定と取得については

を参考にしましたが、
BP_Player のReturn Material on Moveを有効にしなければならないようでしたので受けること自体は解決し、PhysicalMaterialは受けられるようになりましたが、
葉っぱ=Leafと幹=Root で別々のPhysicalMaterialを受けることはできていません。

BP_BigTree というBPの内部のstaticMeshのOverlapEventや、HitEventでもGenerate Overlap Events も Multi Body Overlap も ON ですが
機能しませんでした。


Materialが分かれていれば、1つのMeshで複数のPhysicalMaterialを扱うことは可能です
まずはMaterialが分かれているか確認してください
そして、Material側のPhysicalMaterialとして設定してください

StaticMeshComponentでOverride設定した場合、PhysicalMaterialは単一のものになります

単一のMaterialでも複数のPhysicalMaterialを扱うことは可能ですが
その場合はMeshごとに Support Physical Material Masks の設定と、PhysicalMaterialMaskの作成が必要です
ただしメモリコストが増加します

1 Like

返信ありがとうございます。
StaticMeshComponentでOverrideを外して
別々のマテリアルの
別々のMaterialInstance側のPhysicalMaterialに設定している状態です。
がルートは取れますが、リーフは取れません


設定できているのであれば、あとはCollision状況次第になりますね
Collisionの形状や、Pawnとの当たり方がわかるものを提示してください

ちなみにこちらの検証用のMeshはこういう状態です(UE5.0.3)
CollisionはUseComplexAsSimpleなので、MeshSurfaceと同一です
単一のMeshですが、金属の部分と木の部分はきちんとPhysicalMaterialが別判定になっています

1 Like

ご返信ありがとうございます。
Collisionに絞れてよかったです。
こちらの検証用のMeshはこういう状態です(UE5.0.3)
CollisionはUseComplexAsSimpleで、MeshSurfaceと同一です
単一のMeshですが、水色のA部分と黄色のB部分は
PhysicalMaterialが別判定になっていません。


問題のプロジェクトファイルはこちらです

MaterialでPhysicalMaterialを分ける場合は、ComplexCollisionの利用が必須のようです

Simple as complex ではSimpleCollisionとして設定されたプリミティブがそのままComplexになってしまうため、Surfaceに適用されたMaterialとの一致が取れず、優先度の高い(MaterialIndexの小さい)ほうが出てしまうのではないでしょうか

CharacterMovementはSweepしていますが、その対象はSimpleCollisionです
なので今回の判定では、SimpleCollsionで検知されたほうがPhycisalMaterialとして入ってきています

ひとまず、CharacterMovementが動かすCollisionによる検知でPhysicalMaterialを出し分けたい場合は、対象のCollisionComplexityは Complex as Simple にするのが良いでしょう

なお、LineTrace等でComplexを対象にしたときにはComplexCollsionが参照できるので、結果が変わります

1 Like

返信とご回答ありがとうございます。
CollisionComplexityは Use Complex Collision As Simpleでさらにかつジャンプしてコリジョンがあたった時に反応するようになりました。
歩いただけではだめでした。

完成したプロジェクトファイルはこちらです。