接触すると崩落する物体を作るには
- 接触する
- これは分かりやすく
Collisionのコンポーネントを使うことで実現できます Box Collision,Sphere Collisionなどですね
- これは分かりやすく
- 崩落する
- 「バラバラにしておいたメッシュに物理を適用しておき、接触したときにそれに入れ替えて崩落するように見せる」のような方法も取れます
- 今回は Unreal Engine の Chaos Destruction を利用します
崩落するメッシュを作る
空のレベルを用意しておきます。
0. 準備: モデリングモードで適当な形状を作る
すでに自由にできるアセットがあればそれを使ってもらっても構いません。エンジンアセットはたまに「変更できない」と言われるものもあるので、ここではモデリングモードで作ります。

- モデリングモードを開いたら、ボックスを選択します。
- 今回は床を作りたかったので以下のように高さを小さめにしました。
- このような形状ですね
- 「承諾」します
- そのまま選択した状態にしておいてください
- 今回は床を作りたかったので以下のように高さを小さめにしました。
1. フラクチャモードで崩落するように
モデリングモードからフラクチャモード (Fracture) に変更します

- まずは、「新規」を選択します。すると保存ダイアログが出てきますので、適当な場所と名前を付けてください。
- 今回は
GC_Floorと命名しました。 GCはGeometryCollectionの接頭辞です
- 今回は
- 次にフラクチャにある「一様化 (
Uniform)」 を選択します。
- すると以下のような表示に変わります。

- 私は最小・最大のボロノイサイト数を変更し、破片の数を多くしていますがここは自由です
- パラメータに問題が無ければ 「フラクチャ」というボタンをクリック します
- ここで、おそらく右ペインにある「フラクチャ階層」が以下のように指定した数に分割されていることを確認してください
- 確認
- この状態で以下のように高いところから落下させてみてください。破壊された状態になります。
- 分かりにくいようであれば、以下のように
Damage Thresholdのインデックス 0 の値を小さくすると破壊されやすくなります。
- さらに下に物体を置いておくと派手に壊れます。今回は Cone を置きました。
- この状態で以下のように高いところから落下させてみてください。破壊された状態になります。
3. 破片の一部を固定する
このままでは、問答無用で落下してしまいます。 GeometryCollection を固定する方法はいくつかありますが、まずは簡単な方法から試します。
- 以下のように、一箇所の破片を「フラクチャ階層」から選択し、コンテクストメニューから「固定」を有効化します。
- そうすることで、実行しても空中から落下しません。
- GeometryCollection は固定(またはアンカー / Anchor)箇所からの接続が維持されていると、その場所にとどまることができます。
- これは後述の
Anchor Fieldでも同じことができます。
さあ、ここまでで崩落するメッシュができました。
接触すると崩落するようにする
まずは Actor 継承の Blueprint を作ります。 BP_DestructOnContact という名前にしました。
コンポーネント追加
- Blueprint を開いたら、コンポーネントに「ジオメトリコレクションコンポーネント (GeometryCollectionComponent) 」と「Box Collision」を追加します


- 以下のようなツリーにしています
コンポーネントの設定
GeometryCollectionコンポーネントを選択し、詳細ペインから「Chaos物理」のRest Collectionを設定します。Box Collisionは大きさを合わせます。200x200x50 で作ってあり、床という設定なので、上方にのみ接触させることにします。
Blueprint Graph 作成
- 上記のようにイベントグラフを記述します
- プレイヤーの接触判定は自由です。ここでは
Playerタグを見ています。 Apply External Strainで GeometryCollection に負荷を与えています。これにより崩壊を起こさせます。AnchorIndexは8を指定しています。これは、私が固定した破片が8だからです。StrainここはDamage Thresholdのインデックス0 と同じ値を指定しています。もし、先程変更していればその値でも動作するはずです。- 要は、その閾値よりも大きな値であれば OK です。
- プレイヤーの接触判定は自由です。ここでは
結果
Player タグを持ったキャラクターが上から接触すると崩落します。
Anchor Field を使った方法
ここまでは「GeometryCollection 自体が固定(アンカー)点を持つ」状態での例でした。
Anchor Field を使うことでも同じことができます。まずは Anchor Field の使い方も含めて見ていきましょう。
固定されない Geometry Collection を作る
- 「0. 準備」で作成した床モデルがあるはずなので、それを改めてレベルに配置します
- フラクチャモードに変更し、先程と同様に崩壊するようにモデルを作り、 「3. 破片の一部を固定する」だけをスキップします。
- つまり、空中から落としたら勝手に落下して崩壊する状態です
- 今回は
GC_Floor_notAnchoredと名前を付けました。- 以下の通り固定された破片はありません。

練習: レベルに置いた Anchor Field で試す
ここでの操作はレベルと Level Blueprint での操作です。
- まず、
FS_AnchorField_Genericを配置します。最後にこの例での配置例を示します。
Debugを有効にすると見やすいかもしれません。
- 次に、先程作成した
GC_Floor_notAnchoredの 「Chaos物理」にあるInitialization Fieldsに上記のFS_AnchorField_Genericを指定します。これはレベルに配置されたものを選択できます。 - 続いて、プレイヤーの接触イベントを起こすために
TriggerBoxを配置します。 - 以下が今回の配置例です。

FS_AnchorField_GenericはGC_Floor_notAnchoredに 重なるように配置してくださいTriggerBoxはこの例では単にプレイヤーが接触できればいいだけの配置です。- コーンはおまけです。
- 上記は Level Blueprint に記述しています。レベルにあるものを参照しているので、そのままのコピペでは動作しない可能性があります。
Remove All Anchorsで設定されているアンカー(固定)を削除します。こうすることで、拘束がなくなるため物理が働き落下します。Wake All Rigid Bodiesは無くても動作します。もし、うまくいかない場合は繋いでみてください。
これで、プレイヤーが Trigger Box のエリアに入れば崩落するようになります。
Blueprint にまとめる
BP_DestructOnContact_withAnchorField という Actor 継承の Blueprint を作成します。
GeometryCollection と Box Collision コンポーネントは先程の例と同様に追加・設定します。
ChildActor コンポーネントを追加する

- 「子アクタクラス」に
FS_AnchorField_Genericを指定します。ここでは一応Debugも有効にしています。
Construction Script で設定する
- レベルに配置した
Anchor Fieldの場合は、直接GeometryCollectionのInitialization Fieldsに追加できますが、子コンポーネントの場合はスクリプトで追加する必要があります。BeginPlayでも問題ありませんが、Construction Scriptで設定しておくのがよいでしょう
Box Collision でアンカーを削除
ここに関してはレベルブループリントと同様です。















