[UE5]Chaos Cacheを使ってChaosで壊したものを直してみる


こんな感じのをどうやって作ったかを雑に書いていてくよ。
適当に見てね。（ほぼ未来の自分のためのメモ）


![qiita_-_Unreal_Editor_2022-08-27_00-04-54_Trim_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/cdc9e07c-acd5-728c-8bb6-5b701806084d.gif)


## はじめるにあたって必要なこと

まず今回の作るのに必要なものを書いていこう。

・プラグイン "Chaos Caching"

・スタティックメッシュ "壊してから直したいもの"
（スタティックメッシュをジオメトリコレクションに変えるのでもうある場合は大丈夫）

・UnrealEngine 5.0.3

・後その他もろもろ（）
　
なんかこれだけ見るとめっちゃ楽そう。
けど実際一人で考えながらやったらなんかめんどくさかった。（初心者がやることじゃないよ…）

こっから下はプラグインの入れ方を書いてるからわかる人は本題まで
　
　

まずやるにあたって"**Chaos Caching**"っていうプラグインを追加しておくよ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/fe1be546-f5fe-f82b-45bb-132c6e51f67f.png)
これがないとそもそものCacheが使えないので最初のうちに入れておく。




## 本題


## 1.スタティックメッシュをジオメトリコレクションにする。＋BP_Actor作成

さて、ここから実践です。
まず上で選んだスタティックメッシュをフラクチャモードを使ってジオメトリコレクションにしていくよ。
これ自体は超簡単

まず適当はスタティックメッシュを出して…（今回はスターターコンテンツの中のSM_Rockってやつを使ってるよ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/80c89c44-f24f-8c3e-fe76-f8ef18f28a82.png)

左上にあるフラクチャを押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/bb6f3a4e-69dd-412f-06a0-077906b0ed80.png)

後はスタティックメッシュを選んだ状態で”新規”ボタンを押せば作成されるよ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/a07e0225-b576-539a-9219-352fbc44a8a0.png)

次に伏線となるBP_Actorを作っていくよ。最後のところで使うんだけど正直これしか方法思いつかなかったんです。
まぁ作っていこう。

BPのActorを用意して...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/d9d5fc7e-cf83-3ec1-1540-670b788c8c79.png)

中にメッシュを用意して自分の用意したスタティックメッシュを置くだけ！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/09f2a952-6623-760f-a397-5ce905274f08.png)
後はコンパイルして保存しちゃいましょ。
ほんとにこれだけ。けど重要になりますこの子。

## 2.ジオメトリコレクションをフラクチャモードを使ってボコボコにする。

ジオメトリコレクションをぼこします。というか破壊します。

まずはさっきジオメトリコレクションを選択した状態でツールバーを見るといろいろと選択できるようになってるよ。
（ツールバー閉じちゃったらフラクチャモードを選択モードにした後、またフラクチャモードを選択したら出るはず）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/02daa56f-f6a1-d1a8-9bb6-bd86506ef307.png)

その中のFractureから適当なのを選ぶ（自分はクラスタを選んだよ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/22451337-e73f-fd93-be74-e7358cde049d.png)

するといろいろな数値が出るけど今回はデフォルトのままフラクチャをポチッ！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/d41fe2b4-11f4-6157-30ce-359b0c3e5bb3.png)


そしたら破壊量ってとこの数値をいじるとどんな風に割れてるか確認できるよ
![Qiita用01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/8134f775-719a-92f7-4b85-8dcdaf49605c.gif)


ついでに"**Show Bone Colors**"っていうチェックボックスを外すともともとのマテリアルが見れるよ。便利だね。
（カオス物理の中にあるGeneralの中にあるよ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/732503aa-b5f5-4f27-cc67-6bc461464814.png)

# 3.Chaos Cacheを作成して壊れ方を"記録"する。

こっから少しややこしくなるよ。

まずジオメトリコレクションを選んだら上にあるアクタからChaos、そこからキャッシュマネージャーを名前を付けて作成するよ
（ここでChaos Cachingを入れてないとChaos自体出てこないから、入れてない人は上のほうに書いてあるプラグインの入れ方を参考にしてみてね。 ）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/483fc022-5e23-862d-1994-f100d370529d.png)

そしたらコンテンツブラウザに自分が名前を付けた**キャッシュマネージャー**、
アウトライナーに"**ChaosCacheManager**"って名前の二つができてるはず

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/b986da7e-2028-2a3f-9c47-7340df9d38e3.png)

次に壊れ方を記録するためにアウトライナーの"**ChaosCacheManager**"が赤文字の記録ってなってるのを確認したら一旦ゲームをプレイするよ。


ちなみに四角とかのジオメトリコレクションだと壊れない場合があるから、その場合は今使ってるジオメトリコレクションを開いて、**Impact Type**ってやつをいじってあげるといろんな壊れ方するはず
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/f68fb8a0-0b99-08cd-4a1f-8ff23fc2a891.png)

##### ・Convex
![Conbrt.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/e373ef58-adbc-62e9-5c0a-1487f6a0cd5f.gif)

##### ・Sphere
![Sphere.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/5c41c797-e2e0-17e7-2c05-dbc6ee765e5d.gif)

##### ・Capsule
![Cps.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/17cbe323-01b4-dc16-d655-218ab3d95933.gif)


プレイを押したら好きなタイミングでゲームを止めていいよ。
これをすることでプレイしていた時間分、ジオメトリコレクションの動き（壊れ方）がキャッシュとして保存されちゃうってことなんです。（多分）

# 4.シーケンサーを使ってキャッシュの中を再生してみる

ChaosCacheを使ってキャッシュを保存出来たら、保存した映像をシーケンサーを使って再生してみるよ。

まずはChaosCacheManagerにあるキャッシュの欄のCache Modeを**スタティックポーズ**、Start Timeを**キャッシュに保存してる時間より多く**設定するよ
（例えば上でプレイを押してゲームを止めるまでの時間が5秒なら、5秒以上ならOK）

こんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/3748d02a-5959-65ae-1a01-45d339989697.png)


次にシーケンサーを設定するよ。上のシーケンサーのマークから、レベルシーケンスを作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/7c5f1c87-b056-a27a-9092-86d9d32a47ee.png)

トラック追加から”シーケンサへのアクター”を押して、アウトライナーにある"ChaosCacheManager"を選択。
そこからStart Timeを選択するよ。これで動的にStart Timeが動かせちゃう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/9db8b17c-bfac-a001-8eb5-2cffcb8446f2.png)


後はシーケンサーの最初と最後にStart Timeをセットしてあげるともうほぼ完成
（gifに収まりきらなかった...）
![StartTime.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/5b2c88f4-8426-7cf2-94c0-9e21c6170093.gif)





# 5.TrigaerBoxとかで再生してあげる

ここまで来たらあとはシーケンサーを再生してあげるだけ！
まぁ少し手間なんだけどね。

適当にトリガーボックスを出してから...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/030d09a2-487c-a90e-237d-bd213c47b148.png)

シーケンスにジオメトリコレクションを追加、ジオメトリコレクションのトラックからイベントを追加して、**最後のところにキーフレーム**を打つよ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/ce40905b-f2ae-9b0e-d98e-fe7993323360.png)


あとは全体のBP組んで...

・Level BP
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/b74fce76-9aa7-8630-997a-e97eb0f6486f.png)

・Seq_Rock BP (イベントで出したキーフレームをダブルクリックすればこの画面行けるはず)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/33e28e83-df2a-3dfd-99f5-583a6d07e60a.png)


再生！！

![qiita_-_Unreal_Editor_2022-08-27_00-04-54_Trim_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/9098990b-c51b-34bc-ffec-d47deaac71b2.gif)

めっちゃ長かった気がする...
記事書きながら動画の部分とか作ってたからもしかしたら不備があるかも...

# 懸念点

さて、ここまでやってきたんですけど実はできないことが割とある。

##### ・再生前の状態（壊れてるとき）にコリジョンを持たせることができない
##### ・汎用性がない

考えるだけでも割と出てきちゃう...
けど個人的に壊れたもの直すときとかはムービーの最中だからまぁいいかなぁなんて思ってたり

# 最後に ＋ おまけ

使う場面が限定的すぎて、こんなコアなことやるの僕くらいじゃないかなとか思ってるけど同じ道歩む人は参考までに...

##### ・BP_ActorとDestroy Actorがないと…
![qiita_-_Unreal_Editor_2022-08-27_00-18-12_Trim_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2818152/f0b5abc4-5215-d111-b332-5bc7863d4ff7.gif)