[Unreal Engine 5] 壁を破壊する (Chaos Destruction)

動作確認環境
Unreal Engine 5.5.3
Windows 11 23H2
手順
アニメーションと Niagara についてはこちらを参照。
壁を用意する
Mesh がどのように破壊されるか、あらかじめ仕込んでおく。
- 破壊対象となる Static Mesh を Level に配置する。今回は StarterContent/Architecture/Wall_400x300 を使用。マテリアルには
M_Brick_Clay_Beveledを設定。 - Fracture Mode を選択する。
- 破壊対象を選択した状態で Generate の
Newを押す - 適当な保存場所を選択し、生成する Geometry Collection に適当な名前を付け、
Create Geometry Collectionを押す - 左の Fracture の中から適用したい破壊パターンを選択し、右側の
Fractureボタンを押す。今回はClusterを選択した。- デフォルトでは破片が塗り分けられたデバッグ描画になっている。元のマテリアルで表示したい場合は Fracture Mode で対象を選択して Shift + B を押す。
- Selection Mode を選択して Fracture Mode を抜ける。




出来上がった破壊対象をコピーして使いまわしても良いが、その場合はすべて同じ割れ方になる。
手順を繰り返し、元は同じ Mesh でも破壊パターンを幾つか用意しておけば、より自然に見える。
アンカーの設定
壁の下部にアンカーを設定することで、壁全体がそのまま倒れることを防ぐ。
また、下部の残骸の一部がその場に残ることで、より「壁らしさ」が出る。
- Content Browser の Settings で
Show Engine Contentにチェックを入れる - EngineData/Engine/EditorResources/FieldNodes/FS_AnchorField_Generic を Level に配置する
- FS_AnchorField_Generic を壁の下部に配置し、サイズを適当に調整する
- 壁を選択し、
Initialization Fieldに配置した FS_AnchorField_Generic を設定する




FS_AnchorField_Generic の Debug を True に設定するとデバッグ描画される。

壁の破壊処理を作る
Fracture Mode で作成した壁は Radial Force では破壊できない。
Physics Field を使用する必要がある。
今回は Physics Field のうちの Transient Field を用いる。
- 一つ目の
Add Transient FieldではPhysics TypeにExternal Strainを指定し、Geometry Collection の結合にダメージを与える - 二つ目の
Add Transient FieldではPhysics TypeにLinear Velocityを指定し、破片を飛び散らせる
二つ目の Transient Field は無くても Radial Force で吹き飛ばすこともできる。
ただし Force と Velocity は吹き飛び方が違う。
Force はリアル寄りだが地味になりやすく、Velocity は重さを無視して加速度を設定するためか、派手だが嘘くさい。
併用が効果的かもしれない。

(Transient Field部分拡大)

参考:
以下は別の関数で実装されているが、一時的に Physics Field を発生させるという考え方は同じ。
以下の動画ではメッシュ上の手足の位置にフィールドを発生させているため、リアル寄りの表現をしたい場合に参考になりそう。
弾をぶつけて破壊したい場合は以下を参照。
Discussion