初めに
薄い板などでマテリアルのTwoSidedを有効にして両面にすることはままあると思います。それに伴いコリジョンも両面にしたいという場合もあると思います。
エディターにインポート済みのStaticMeshに対して設定するのは簡単ですが、ランタイムで読み込んだ後に設定する場合BluePrintでは無理だったのでC++で実装したものをご紹介します(もしかしたら他の方法もあるのかなぁ)。
環境情報
Windows 11
UE 5.3.2
インポート済みのStaticMeshに対して
C++の実装の話をする前に一応インポート済みのStaticMeshに対する設定にも触れておこうと思います。
この方法は簡単でStaticMeshのCollision設定の中にあるDoubleSidedGeometryにチェックをいれるだけでOKです。
C++で実装する
void MyUtils::SetDoubleSidedGeometryAfterLoad(UStaticMeshComponent* StaticMeshComponent, bool IsEnable)
{
UStaticMesh* StaticMesh = StaticMeshComponent->GetStaticMesh();
StaticMesh->GetBodySetup()->bDoubleSidedGeometry = IsEnable;
StaticMeshComponent->UnregisterComponent();
StaticMeshComponent->SetStaticMesh(StaticMesh);
StaticMeshComponent->RegisterComponent();
}
実装はこんな感じでポイントは2つです。
1つ目はStaticMeshのDoubleSidedGeometryにtrue/falseを設定します。
2つ目はStaticMeshComponentのUnregisterComponentとRegisterComponentを呼ぶことです。
Static MeshのDoubleSidedGeometryの設定を変更するだけではランタイムでは設定自体が適用されないみたいです。
なので設定変更したStatic MeshをStaticMeshComponentに再登録する必要があるみたいです。
ランタイムで読み込むプラグインの中でStaticMeshを生成するときにDoubleSidedGeometryの設定を行う方が効率的ではありますが、保守性が悪いのでプラグイン改造をしたくないという方にはこちらの方法で設定するといいかもしれません。