3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【UE】両面コリジョンを動的に有効にする

Last updated at Posted at 2025-03-12

初めに

薄い板などでマテリアルのTwoSidedを有効にして両面にすることはままあると思います。それに伴いコリジョンも両面にしたいという場合もあると思います。
エディターにインポート済みのStaticMeshに対して設定するのは簡単ですが、ランタイムで読み込んだ後に設定する場合BluePrintでは無理だったのでC++で実装したものをご紹介します(もしかしたら他の方法もあるのかなぁ)。

環境情報

Windows 11
UE 5.3.2

インポート済みのStaticMeshに対して

C++の実装の話をする前に一応インポート済みのStaticMeshに対する設定にも触れておこうと思います。

image.png
この方法は簡単でStaticMeshのCollision設定の中にあるDoubleSidedGeometryにチェックをいれるだけでOKです。

C++で実装する

MyUtils.cpp
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の設定を行う方が効率的ではありますが、保守性が悪いのでプラグイン改造をしたくないという方にはこちらの方法で設定するといいかもしれません。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?