🧱
[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