Unreal Engine(UE)で物体を壊してみよう!
物体をバラバラに壊したいと思ったことはありませんか?
今回はその方法をご紹介します!
破片の大きさや物体の重さの変え方も併せて解説します。
![質量による物体破壊の違い](https://unreal-engine-tech.arsdiary.com/wp-content/uploads/break-an-object.gif)
動作環境
当記事の動作環境は以下の通りです。
バージョンや環境によっては、正常に動作しない可能性があります。
また、プロジェクトはサードパーソンプロジェクトの使用を前提とします。
壊す物体の作成
まずは壊したい物体を作る必要があります。
今回は新規に作成せずに、サードパーソンプロジェクトでデフォルト配置されている、青い箱を対象にします。
破壊用の設定
ここからは、物体に対して破壊用の設定をしていきます。
今回は、Chaos Destruction(カオス破壊、ケイオス破壊)というUE5以降で使用できる機能を使用します。
(UE4でも使用は可能ですが設定等が面倒らしいです…)
フラクチャモードの起動
破壊したい物体を選択した状態で、選択モードから「フラクチャ」を選びます。
![フラクチャの設定](https://unreal-engine-tech.arsdiary.com/wp-content/uploads/break-an-object-fracture.png)
ジオメトリ コレクションを作成
Generateの新規ボタンをクリックします。
保存場所を適切に設定して、「ジオメトリ コレクションを作成」ボタンを押下します。
![ジオメトリコレクションの新規追加](https://unreal-engine-tech.arsdiary.com/wp-content/uploads/break-an-object-new.png)
メッシュをジオメトリコレクションに変換しています
壊れ方を設定
![破壊量の設定](https://unreal-engine-tech.arsdiary.com/wp-content/uploads/break-an-object-Amount-of-destruction.png)
続いて、Fractureから好みの壊れ方を設定します。
まずは無難に「一様化」を設定し、後から他を試してみると良いでしょう。
さらに、破壊量を1に設定します。
これは、編集しやすくするための設定ですから、後ほど0に戻します。
フラクチャボタンを押下します。すると、レベルが1つ増えます。
このレベルは、フラクチャ階層(Fracture Hierarch)を表します。
フラクチャ階層は、壊れた時の破片が属するものです。
![](https://unreal-engine-tech.arsdiary.com/wp-content/uploads/break-an-object-level.png)
フラクチャボタンを押下するたびに、フラクチャ階層が作成されます。
例えば3回割ると、Level0~3まで合計4つの階層を持ったジオメトリコレクションが作られます。
正確には少し異なりますが、ボーン数は破片数だと思えば良いです。
設定によってはランダム化するため、絶対この破片数になるとは限りませんが、おおよそ近しい数になります。
どのくらいの破片量にするかを、フラクチャ階層数で設定します。
破片を細かくしたい場合、最小(最大)ボロノイサイト数を大きい数に変更します。
フラクチャボタンを押下する前に設定してくさい。
最後に、破壊量を0に戻します。
物体の見た目や質量などの調整
色を戻す
このままゲームを開始しても、カラフルなフラクチャ編集時の色が反映されたままになります。
物体を選択した状態で、詳細欄から「Chaos物理」-「General」と進み、「Show Bone Colors」のチェックを外します。
![show bone colorsの設定](https://unreal-engine-tech.arsdiary.com/wp-content/uploads/break-an-object-show-bone-color.png)
これで、元の色が表示されるようになります。
質量の調整
物体の破壊は、物体の質量も影響しています。
作成したジオメトリコレクションを開き、「コリジョン」欄のMassの値を変更します。
これが物体の質量設定で、数値が大きいほど質量は大きくなります。
![Mass設定](https://unreal-engine-tech.arsdiary.com/wp-content/uploads/break-an-object-mass.png)
例えば、質量を2500と25000に設定した場合の壊れ方は下図の通りです。
質量以外は全て同じ設定値になっています。
![質量による物体破壊の違い](https://unreal-engine-tech.arsdiary.com/wp-content/uploads/break-an-object.gif)
応用編
ここまでは破壊時の必須設定を説明してきましたが、ここからは必須ではなく、各自で必要なものだけ実装する応用編をご紹介します。
物体を壊す条件の緩和
同じ質量設定でも、壊れる条件(衝突時のダメージ)を変えることで壊れやすさを変えることができます。
![ダメージ設定](https://unreal-engine-tech.arsdiary.com/wp-content/uploads/break-an-object-damage.png)
物体のメッシュを選択した状態で、詳細欄から「Damage」-「Damage Threshold」に進みます。
このインデックスはフラクチャ階層と紐づきます。
インデックス[0] = フラクチャ階層のレベル1です。
ここでは、フラクチャ階層レベル1の状態に壊れるためのダメージを設定します。(レベル2以降も同様です)
例えば、同じ質量10に設定していても、Damageの条件を5000にすると箱は壊れませんが、Damageを500にするとキャラが走って衝突するだけで壊れます。
![mass10、damage5000設定](https://unreal-engine-tech.arsdiary.com/wp-content/uploads/break-an-object-mass10-damage5000.gif)
![mass10、damage500設定](https://unreal-engine-tech.arsdiary.com/wp-content/uploads/break-an-object-mass10-damage500.gif)
ぶつかる側の質量を調整
逆にキャラクターや銃弾の質量を大きくすることでも、壊れ方を変えることが可能です。
しかし、ぶつかる側の質量を変更すると、当然他の物体に対しても変更した質量で物理計算が働くため、おススメできる方法ではありません。
ぶつからずに壊す(魔法的なもの)
壊れるトリガーを衝突以外のものにすることも可能ですが、少し手間がかかります。
![時間差で物体を破壊する](https://unreal-engine-tech.arsdiary.com/wp-content/uploads/break-an-object-tick.gif)
まずはコンテンツブラウザの設定から、「エンジンのコンテンツを表示」を有効化します。
![エンジンコンテンツの有効化](https://unreal-engine-tech.arsdiary.com/wp-content/uploads/EngineContentsTrue.png)
コンテンツブラウザでAllフォルダを選択した状態で、「FS_」を検索します。
すると「FS_MasterField」が表示されるはずです。
![FS_MasterField](https://unreal-engine-tech.arsdiary.com/wp-content/uploads/FS_MasterField.png)
FS_MasterFieldをデフォルト値のまま、物体に重ねるようにして配置します。
![FS_MasterFieldを重ねる](https://unreal-engine-tech.arsdiary.com/wp-content/uploads/break-an-object-Overlap-FS_MasterField.png)
あとは「FS_MasterField」の設定を変更することで、発動するトリガーの種類や時間、さらには力を加える方向や力の大きさも自由自在に操ることができます。
発動するトリガーは「Activation Type」で設定しますが、これデフォルトの「遅延(一定時間経過)」ではなく「トリガー」とすることで、独自のトリガーを使うと面白さが増します。
しかし、ブループリントで複雑なノードを組むことになるのでここでは省略します。
「FS_MasterField」の詳細設定は多すぎるので、公式ドキュメントを参照してください。
まとめ
UE5ではChaos Destruction機能を使って、物理計算など難しいことを極力排除して物体破壊を実装することができます。
Chaos Destructionについての詳細は公式ドキュメントを確認してください。