【UE5】Chaos Destructionの基本的な使い方

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

フラクチャによる破壊メッシュ

キューブメッシュの配置

まずはレベルに任意のメッシュを配置します。

フラクチャ・ジオメトリコレクションの作成

選択モードから「フラクチャ」を選びます。

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

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

フラクチャ階層の作成

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

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

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

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

崩落床の作り方

キューブメッシュの配置

まずはキューブをレベルに配置して平たい形にします。

フラクチャ・ジオメトリコレクションの作成

キューブを選択した状態で「選択モード > フラクチャ」を選択。

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

フラクチャ階層の作成

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

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

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

Field Systemを使う

Field Systemは、Chaos物理エンジンと連携して動作するシステムで、Geometry Collectionの挙動を細かく制御できるシステムです。

Field Systemは「エンジンのコンテンツ」として提供されている機能であるため、コンテンツドロワーの「設定」から「エンジンのコンテンツを表示」にチェックを入れる必要があります。

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

クラス名サムネイル用途具体例
FS_AnchorField_Genericこのクラスは、指定された領域内のGeometry Collectionを固定するためのフィールドを作成します。アンカーフィールド内のオブジェクトは、他の力や影響を受けずに位置が固定されます空中に浮いた床
FS_BaseFieldこれは基本的なフィールドクラスで、他のより具体的なフィールドタイプの基礎となります。直接使用されることは少なく、他のフィールドクラスの親クラスとして機能します
FS_BombField_Prototype爆発効果を模倣するためのプロトタイプフィールドです。中心点から放射状に力を適用し、オブジェクトを破壊したり押し飛ばしたりする効果を生み出します一時的な衝撃波の発生 (爆発による爆風など)重力装置反重力装置
FS_MasterFieldジオメトリコレクション(破壊可能なオブジェクト)に対して力を加え、破壊を引き起こすための制御を行います他のFieldSystemActorを組み合わせた機能
FS_RadialField中心点から放射状に効果を及ぼすフィールドです。距離に応じて効果の強さが変化し、円形や球形の影響範囲を作り出します
FS_SleepDisable_Genericこのフィールドは、指定された領域内のGeometry Collectionの物理シミュレーションを無効化または「スリープ」状態にします。これにより、パフォーマンスを向上させたり、特定の領域での物理挙動を制御したりできます無重力空間時間停止装置
FS_UniformScalarField均一なスカラー値を持つフィールドを作成します。フィールド内のすべての点で同じ強さの効果を適用する場合に使用します
FS_UniformVectorField均一なベクトル値を持つフィールドを作成します。フィールド内のすべての点で同じ方向と大きさの力を適用する場合に使用します
FS_WaveScalarField波動のようなパターンでスカラー値が変化するフィールドを作成します。時間とともに変化する効果や、空間的に周期的な効果を生み出すのに適しています

床を空中に固定化するには「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 TypeOnTick
  • Field Settings (フィールド設定)
    • Apply External Strain to Break Node Connections (外部ひずみを適用してノード接続を解除)
      • Strain Magnitude5000000000.0
      • Strain Falloff TypeInverse

足元に力が入ることで、ジオメトリコレクションが破壊されるようになりました。

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” を「無視する」にすると反応しなくなります。

参考

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

Follow me!