Landscapeのコリジョンプリセット変更について

お世話になっております。

足場としてのコリジョンをプリセットで区別したいと考えています。

そのために「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

以上、ご確認よろしくお願いします。

お世話になっております。

お察しのことかと思いますが Landscape のコリジョンは LandscapeHeightfieldCollisionComponent が担っておりますので、基本的にはご指摘のようにこちらの設定を変更するような対処にはなるかと思います。

エンジンのコードに手を入れることを避けるのであればレベル開始直後に下記のような処理を行う方法も考えられます。

[Image Removed]​

探した限りでは Landscape のコリジョンプリセットを変更することによる特別な弊害についての情報は見つかりませんでした(変更の事例そのものが少ないのですが)。​

よろしくお願いいたします。​

ご確認いただきありがとうございます。

ご提案頂いた方法も含めて社内で検討いたしましたが、

LandscapeHeightfieldCollisionComponentのコンストラクタで初期値を変更することにしました。

ご対応いただきありがとうございました。

ご確認ありがとうございます。

本件はクローズいたします。

また何かありましたらお問い合わせ下さい。