【UE5】Chaos Destructionの基本的な使い方
プログラマーの尾関です。今回は Chaos Destructionの基本的な使い方を紹介したいと思います。

フラクチャによる破壊メッシュ
キューブメッシュの配置
まずはレベルに任意のメッシュを配置します。

フラクチャ・ジオメトリコレクションの作成
選択モードから「フラクチャ」を選びます。

メッシュを選択した状態で「Geberate > 新規」をクリック。

ジオメトリコレクションを保存するフォルダを選択して「ジオメトリコレクションを作成」をクリック。

フラクチャ階層の作成
“Fracture” から “一様化” を選び、「フラクチャ」をクリックします。

すると「フラクチャ階層」にフラクチャが作られました。

なおフラクチャのパラメータは、このあたりの枠を動かすと数多くのパラメータが表示されます。

実行するとメッシュが落下の力で破壊されることが確認できます。

崩落床の作り方
キューブメッシュの配置
まずはキューブをレベルに配置して平たい形にします。

フラクチャ・ジオメトリコレクションの作成
キューブを選択した状態で「選択モード > フラクチャ」を選択。

「新規」をクリックして、ジオメトリコレクションを作成します。

フラクチャ階層の作成
フラクチャの種類は「クラスタ」を選択。

「フラクチャ」を3回クリックして、レベル3まで作成します。

しかし実行すると落下してしまいます。

Field Systemを使う
Field Systemは、Chaos物理エンジンと連携して動作するシステムで、Geometry Collectionの挙動を細かく制御できるシステムです。
Field Systemは「エンジンのコンテンツ」として提供されている機能であるため、コンテンツドロワーの「設定」から「エンジンのコンテンツを表示」にチェックを入れる必要があります。

検索欄に「fs_」と入力すると、FieldSystemActorがいくつか見つかります。

床を空中に固定化するには「FS_AnchorField_Generic」が向いているのでこれをメッシュアクターに重なるように配置します。

他の床に接している部分に重ねました。

重ねるだけでは動作しないので、メッシュアクターを選んで詳細タブから「GC > Chaos物理 > Initialization Fields」の「+」ボタンをクリック。

レベルに配置した「FS_AnchorField_Generic」を選択します。

床が空中に固定されました。

FS_MasterFieldで力を加える
ただ上に乗っても壊れなくなってしまったので、キャラクターの足元にFS_MasterField を使って力を発生させます。

詳細タブから以下のようにパラメータを設定します。
- トランスフォーム
- 位置 = (0, 0, -80)
- 拡大・縮小 = (0.3, 0.3, 0.3)
- Child Actor Template
- Default
- Activation Type: OnTick
- Default
- Field Settings (フィールド設定)
- Apply External Strain to Break Node Connections (外部ひずみを適用してノード接続を解除)
- Strain Magnitude: 5000000000.0
- Strain Falloff Type: Inverse
- Apply External Strain to Break Node Connections (外部ひずみを適用してノード接続を解除)
足元に力が入ることで、ジオメトリコレクションが破壊されるようになりました。

FS_SleepDisableGenericで処理負荷軽減
ジオメトリコレクションは常に物理エンジンの計算が行われてしまうので、FS_SleepDisableGenericを使って物理を無効化します。

メッシュの色分けを無効にする
詳細のGCタブから、General > Show Bone Colors のチェックを外すとボーンの色分けが無効になります。

その他のテクニック
破壊のプレビュー
フラクチャタブから「破壊量」を動かすと、破壊のプレビューができます。


メッシュの分割による色分けを無効にする
ジオメトリコレクションでメッシュを分割すると、分割単位で色分けされてしまいます。

これをもとに戻すには、「詳細 > GC」タブから “General > Show Bone Colors” のチェックを外します。

物理の力が加わるまで動かないようにする
「詳細 > 物理」タブから、”Start Awave” のチェックを外すと物理の力が加わるまで動かないようになります。

このままだとまったく動かなくなってしまうので、”FS_MasterField” でオブジェクトを囲みます。

爆発のタイミングを遅らせたい場合は “Activation” を「遅延」にして、”Delay Amount” で遅延する秒数を指定できます。

弾の衝突で破壊する方法
FS_MasterFieldの生成
“On Component Hit” や “Event Hit” などで衝突処理を行う際に、FS_MasterFieldを Hit Location (ヒット位置) に生成します。
- 半径サイズ: Set Sphere Radius: 150.0
- 加える力: Radial Magnitude: 5000.0

FS_MasterFieldの “CE Trigger” を呼び出す
生成してすぐに力を発生させたいので、CE Triggerを実行します。
また、FS_MasterField のインスタンスを消したいので、Destroy Actor で削除しておきます。

破片が他のオブジェクトを動かさないようにする
デフォルト設定だと破片が他のオブジェクトに衝突したときに動いてしまって困る場合は、「詳細 > 物理」タブから “コリジョンレスポンス > オブジェクト応答 > Destructible” を「無視する」にすると反応しなくなります。

参考
この記事を書くために以下の記事を参考にさせていただきました。