見出し画像

RayFire For Unityでビルを破壊するまでのやり方の覚書

先日そこそこのお値段のするアセットRayFireForUnityを購入しました。

もともと3DSMaxのプラグイン?らしいのですが、それのUnity移植版です。
何ができるかというと

上記の動画の通りMeshを破壊するためのアセットです。
なんかワクワクしたのでそこそこのお値段でしたが軽率に買ってみました。
で、

画像1

このビルにロボットを当てて壊す動画を作りたいと思います。
このビルは直方体の8頂点、つまりただの四角なんですがsubstanceとUnityのHDRPの力でこのクオリティにしたものです。
ほんとに簡単にこんなのが出来るんですから凄いですよね…


RayFireForUnityのチュートリアル動画(英語)はすごい充実してていいんですが、イチからちゃんとすべてのパラメータの説明をしているので
「細かいことはいいからビル壊す方法教えろや!!」っと思う僕みたいな気の短い人のためにこうすれば壊れるよっというところまで覚書したいと思います♪
大まかの手順としては
1.RayfireShatterをアタッチしてビルの「バラバラビルPrefab」を作る
2.
バラバラビルprefabをアセット化する
3.RayfireRigidをビルとロボにアタッチしてぶつける
4.
ビルに当たったところを中心に壊れるようする
5.細かい破片をDebrisでパーティクル作成
6.さらに細かい砂ぼこりをDustでパーティクル作成

以上の6項目になります

1.RayfireShatterをアタッチしてビルの「バラバラPrefab」を作る

まずはUnityにビルのFBXを読み込みます。
その時

画像4

上記のようにFBXのInspectorでRead/Write Enabledに必ずチェックを入れて下さい。これを入れないと読み込んだFBXをバラバラに出来ません!

ヒエラルキーにビルを置き、MeshRendererのついたゲームオブジェクトに
RayfireShatterのスクリプトをアタッチします。

画像2

こういう感じのUIです。
FragmentsのTypeには

画像3

こんな感じでいろいろな種類がありますがここでは「Voninoi」を選びます
で、Amountの数値を600にして上の「Fragmetn」ボタンを押すと…

画像5

おおおお!!ビルに亀裂があああああ!!!いい感じです。
このRayFireはさらにロボットが当たる場所を指定することができます。

画像6

CenterのShowを押すと

画像7

画像のように球が現れますのでこれをロボットが当たるところに配置します
で、やり直してみると…

画像8

……右の当たってるところの粉砕が多くなったような気がしますw
細長いビルなのであんまり変わりませんでしたねw

2.バラバラビルprefabをアセット化する

ヒエラルキーを見ると

画像9

このような感じでバラバラに分割されたmeshが作成されています。
「よし、Cube_rootをそのままprefab化すればOK」っと思うかもしれません
ですが、そのままprefab化してprefabの中身を見ると…

画像10

Meshの割り当て先がNoneになっています…
これでは別のシーンで使いたい場合とかは使えない状態ということになります。
そこでRayFireコンポーネントのExportの

画像11

「ExportLastFragments」を押しアセットをAssetsフォルダ内に保存します。
それで先ほどと同じようにCube_rootをprefab化してみると…

画像12

無事Meshに割り当てられました。

これでバラバラになったビルのprefabが完成しました。
次はいよいよ物をビルに当てて壊すアニメーションの作成です!!

3.RayfireRigidをビルとロボにアタッチしてぶつける

とりあえず壊すだけなら意外と簡単にできます。
テンションをあげるためにとりあえず壊してみましょうw
まず先ほど作ったPrefabをヒエラルキーに置きます。

画像13

そしてPrefabに「RayfireRigid」のコンポーネントをアタッチします。
そして「initialization」を「At Start」に「ObjectType」を「MeshRoot」にします。

あとは再生するだけ!

画像14

ぎゃー壊れた!!!!w
テンションあがりましたか?僕はあがりました。

では次にビルにCubeがぶつかった瞬間に壊れ始めるようにしてみましょう。
まずビルの「RayfireRigid」設定を変更します

画像15

「simulationType」を「Sleeping」にします。
Sleepingにするとビルのオブジェクトに何かしらの力が加わるまで壊れるシミュレーションを止めることができます。
次にビルにぶつけるCubeに衝突が起こるようにアニメーションを付けます。
そしてぶつけるCubeにも「RayfireRigid」をアタッチします。

画像16

そして「initialization」を「At Start」に「simulationType」を「kinematic」にします。
これだけです!では再生してみましょう!

画像17

画像18

見事Cubeがぶつかった瞬間にビルの崩壊がはじまりました!!

ただ、これだとCubuが衝突したくらいでビル全体が壊れてしまうのは不自然ですよね??
ですので当たったところを中心に壊れるようにしたいと思います

4.ビルに当たったところを中心に壊れるようにする

今まで使ってきたビルの「simulationType」はDynamicとSleepingはバラバラに分割されたビルが全体的に壊れていく様子をシュミレーションするもののようです。
なのでビルがオブジェクトが当たった衝撃で壊れる表現にするためビルの「simulationType」を「Inactive」にしてみましょう。

画像19

そして先ほどのアニメーションを再生すると…

画像20

当たったところだけが壊れて良い感じに!!
ただ、希望としては当たったところを中心にしてビルが崩れる感じにしたいと思います。
つまりCubeが当たった時の衝撃の影響度を強めてビルを崩壊させるということです。
そこで「Activation」の設定を変更して影響度を変えていきます。
ここで「By Velocity」と「By Offset」の数値を変更することでいい感じにすることができます。
マニュアルに書いてあるBy Velocityの説明を翻訳すると
「非アクティブなオブジェクトは、他の動的なオブジェクトによって押されたときに、その速度が By Velocity の値よりも高くなるとアクティブになります。0に設定するとオフになります。」
ということはこのVelocityが「0」以外の小さな数値であればあるほどバラバラにオブジェクトが崩壊しやすくなるということになります。
試しに0.01にしてみると…

画像21

跡形もなくバラバラに…
つまり、ほんの少しでも力が加わると壊れる脆いビルになったということです。
次に1.0にしてみると…

画像22

別角度から見ると

画像23

だいぶいい感じで脆さはなくなりましたがVelocityの値が小さくなるとオブジェクトが止まってしまうのであり得ない積み上がりの破片ができたり、空中で止まってしまうみたいなことが起きてしまいます。
そこで次の値「By Offset」を使います。
マニュアルの説明の翻訳は次のようになります。
「元の位置からオフセット値よりも遠くに押し出された場合、非アクティブなオブジェクトがアクティブになります。0に設定するとオフになります。」
つまり、「0」以外で数値が小さければ小さいほど元の位置から少しでも動いたらアクティブになるということです。
ですのでVelocityを「1.0」にした先ほどの設定にoffsetを0.01にしてみると…

画像24

再び粉々に…
このVelocityとoffsetの値をいい感じ調整していきます。
Velocity0.85/Offset0.3にすると…

画像25

理想に近づきました!
が!!!

画像26

なんじゃ!!てめえは!!!!

細かい破片なのでそれぞれの値を大きくすと動かなくなってしまいました…
かといって数値を小さくするとこの細かい破片の部分以外ところがバラバラになりすぎてビル崩壊がひどい…
たぶんですが、FragmentsのPrefabを作る時にCenterのShowで当たる位置を設定したのがまずかったみたいですね…
なのでFragmentsのPrefabを作りなおせば何とかなると思います。
ですがここではこの問題を「Connectivity」を使って解決したいと思います。
Connectivityの説明を翻訳すると
「Inactive オブジェクトは、他の Inactive オブジェクトを介して Unyielding プロパティ On を持つ任意の Inactive オブジェクトに到達できない場合にアクティブ化されます。RayFire Connectivityコンポーネントは、Inactiveオブジェクト間の接続を確立し、他のInactiveオブジェクトとの接続を失った場合にそれらをアクティブにするために使用しなければなりません。」
ちょっとわかりずらいですねw
とりあえずビルの「Rayfire Connectivity」のコンポーネントを付けてみたいと思います

画像27

そして一番上の左「SetupConnectivity」をクリックすると…

画像28

こんな感じで各破片にConnectivity(関係性)が作成されました。
今まではバラバラだったそれぞれの破片に関係性が付与されたことになります。
で、Rayfire Rigidのコンポーネントに戻り設定を以下のようにしてみます。
Connectivityにチェックを入れるのを忘れずに!

画像29

そして再生してみると…

画像30

画像31

画像32

画像33

画像34

Connectivity(関係性)のおかげでビルの破片がひとまとまりになる部分も出来てとてもリアルなビル崩壊の結果になりました!
ここまでの動画はこちらになります

とりあえず一区切りとして今回の記事はここまでです。
5.細かい破片をDebrisでパーティクル作成
6.さらに細かい砂ぼこりをDustでパーティクル作成
はまた次回やりますので~

この記事が気に入ったらサポートをしてみませんか?