【UE4】物理処理をしてみる
今回は、Unreal Engine での物理シミュレーションについて紹介します。
ドミノを利用して説明します。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics01-1024x583.jpg)
新規プロジェクトを作成します。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics02-1024x583.jpg)
マップ上に、キューブを配置します。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics03-1024x583.jpg)
キューブの拡大・縮小でドミノの形にします。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics04-1024x583.jpg)
キューブを複製します。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics05-1024x583.jpg)
1つめのドミノが倒れるように、角度を付けます。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics06-1024x583.jpg)
ここまでの設定でプレイをした結果です。
物理処理を有効にしていないため、配置した場所にとどまっています。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics07-1024x583.jpg)
1つ目のドミノを選択し、詳細 -> 物理 -> Simulate Physics にチェックを入れます。
これで、1つ目のドミノのみ、物理演算処理が動くようになります。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics08-1024x583.jpg)
プレイした結果です。1つ目のドミノは傾いた状態で配置していたため、物理処理され倒れました。2つ目のドミノは物理処理を有効にしていないため、倒れず1つ目のドミノは立てかけられた状態になりました。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics09-1024x583.jpg)
2つ目のドミノも物理処理を有効にします。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics10-1024x583.jpg)
1つ目のドミノが2つ目のドミノにぶつかり、2つ目のドミノも物理演算が行われ倒れました。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics11-1024x583.jpg)
配置したすべてのドミノ(キューブ)の物理処理を有効にし実行した結果です。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics12-1024x583.jpg)
続いて質量の実験を行うため、平面でスロープを作成します。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics13-1024x583.jpg)
スロープの上部に、スフィアト(ボール)を配置し物理処理を有効にします。
※1つ目のドミノの傾きは戻しておきます。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics14.gif)
ボールは物理処理でスロープを転がり、ドミノに当たりドミノ倒しが始まりました。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics15-1024x583.jpg)
ボールの質量を変更してみます。
詳細 -> 物理 -> Mass in KG で 質量を変更します。
500Kgに設定してみます。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics16.gif)
ボールが重くなり、先ほどより勢いよくドミノが弾かれます。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics17-1024x583.jpg)
逆に、軽くしてみます。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics18.gif)
軽くしたため、ドミノが倒れなくなりました。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics19-1024x583.jpg)
ここまで出来たら、一つ落ちを付けたくなりますよね。
旗を付けたドミノを作成し配置しました。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics20.gif)
プレイした瞬間、ドミノが後ろから倒れてしまいました。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics21-1024x582.jpg)
原因は、コリジョン(当たり判定)のエリアがざっくり設定されているためです。メッシュのコリジョンから確認することができます。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics22-1024x582.jpg)
詳細 -> コリジョン -> CllisionComplexity -> Use Complex Collision As Simple で詳細なコリジョンを使えば解決!と思ってしまいますよね?
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics23-1024x583.jpg)
???旗付きドミノが倒れなくなってしまいました。
残念ながら、 Use Complex Collision As Simple は物理処理ではコリジョンが適用されなくなってしまいます。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics24-1024x583.jpg)
色々回避方法はあるかと思いますが、今回は旗とドミノを分けることで回避します。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/Physics25-1024x582.jpg)
メッシュは分けたのですが、一緒に動いて欲しいためブループリントで、ドミノと旗のTransformを連動させました。
![](http://dipross.co.jp/eng/wp-content/uploads/2022/01/fin.gif)
物理処理によるドミノ倒しが完成しました。
diprossではUnrealEngineを利用したコンテンツ開発・3D動画制作を請け負っています。