お世話になっております。
足場としてのコリジョンをプリセットで区別したいと考えています。
そのために「GroundObject」というプリセットを用意し、中身は(現状では)「BlockAll」と同様の設定にしました。
このプリセットをレベル内のLandscapeのアクター自体のコリジョンプリセットに設定したのですが、
この方法ではLandscapeは「BlockAll」として判定されるようでした。
検討している対応方法
レベル内のLandscapeアクターにコリジョンプリセットを設定しても、コリジョンとして判定されるプリミティブコンポーネントである、LandscapeHeightfieldCollisionComponentのプリセットはBlockAllのままのようでした。
そのため以下のように、ULandscapeHeightfieldCollisionComponentのコンストラクタでCollisionProfileの初期値を変える方法を検討しています。
// Engine\Source\Runtime\Landscape\Private\LandscapeCollision.cpp 3168行目
ULandscapeHeightfieldCollisionComponent::ULandscapeHeightfieldCollisionComponent(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
// デフォルトのコリジョンプリセットをGroundObjectに変更
#if 1
SetCollisionProfileName(FName("GroundObject"));
#else
SetCollisionProfileName(UCollisionProfile::BlockAll_ProfileName);
#endif
SetGenerateOverlapEvents(false);
~~=以下略~~~
}
※一時的な地面の判定方法として、アクターのTagsに「LandScape」が含まれている場合は、プリセットが「BlockAll」でも地面のコリジョンとして判定するように対応しました。しかし、処理を簡潔にしたいことと、ヒューマンエラーを防ぐ観点からプリセットで地面の判定を統一しておきたいと考えています。
質問内容
- Landscapeのコリジョンプリセットを変更することによって問題が発生した事例や懸念点はあるか
- 対応方法として、他におすすめの方法はあるか
確認環境
- Perforce版 //UE5/Release-5.6/ CL44394996
以上、ご確認よろしくお願いします。