アルゴンUE4/UE5&アプリ開発日記

UE4/UE5の機能やプラグインを紹介します。初心者や中級者向けになってます!!

【UE4】ProceduralMeshを使いメッシュを切る。

オブジェクトを切りたくないですか?(^ω^)

今回はゲームとかでオブジェクトが切るために使用する、

ProceduralMeshを使ってみようと思います。

UE4.27.2を使用して説明しています。

参考にさせていただいたのは下記のyoutubeになります!

サンプル用に作成したプロジェクトはこちらになります。

※私の環境でしか確認していないので動かなかったらご連絡ください・・・

プロジェクトの作成

まずはプロジェクトを作成していきます。

FPSのサンプルプロジェクトを作成して進めていきます。

f:id:yoshikata1990:20200329084704p:plain

続いてファーストパーソンテンプレートを選択します。

f:id:yoshikata1990:20200329084725p:plain

ここまで行えば行えばプロジェクトが作成されます。

・目次に戻る

切られる側のオブジェクトを用意する

まずアクターのブループリントを用意します。

右クリックでブループリントを選択してアクターを選択します。

ブループリントの作成

今回はキューブをProceduralMeshに設定します。

ProceduralMeshComponentとCubeを追加します。

※分かりやすいようにマテリアルの変更をするのもいいかもしれません。

各コンポーネントの追加と更新

つづいてProceduralMeshにするスタティックメッシュに対して、

AllowCPUAccessをTrueにしてCPUから情報を取得できるようにします。

設定をONにしておきます。

AllowCPUAccessをONにする

その後コリジョンをオートコンベックスコリジョンで作成します。

凸型分解のメニューから適応を押します。

キューブの当たり判定の画像Cubeのコリジョン設定が完了したら、

ProceduralMeshコンポーネントの方のSimulate PhysicsをONにして、

Use Complex as Simple CollisionをOFFにします。

※シンプルな当たり判定を使用し物理シミュレーションが動作する設定にします。

ProceduralMeshの各設定

各設定が完了したらコンストラクの方で、

ProceduralMeshに対してCube情報をコピーしてCubeコンポーネントを削除します。

コンストラクタでのProceduralMeshコピー

これで切られる側のActor設定は完了になります。

・目次に戻る

飛ばす物体を用意する

今回はFirstPersonProjectileをコピーして作成します。

アクターをコピーする。

コピーを作成したらCollisionComponentを選択して、

コリジョンプリセットをBlockAllに変更します。

CollisionComponentのコリジョン設定を変更

プロジェクタイルの設定が完了したらOnComponentHitに設定をします。

Hitの構造体ピンを分割しておきます。

※分割する方法は右クリックで構造体ピンを分割を選択します。

ピンの分割作業

ピンを分割したらHit時にProceduralMeshかどうかを判断し、

ポリゴンを切るという処理を追加します。

1.Cast To ProceduralMeshComponetでキャストできるか確認

2.Castに成功した場合はSlice Procedural Meshでメッシュを切る

ProceduralMeshだった場合削除

Slice ProceduralMeshの設定項目としては下記になっています。

・In Proc Mesh → ProceduralMeshを指定

・PlanePosition → 切れる場所

・Plane Normal → 切れる方向の法線

・Create Other Half → 破片の作成するかどうか

・Cap Option → 切れ目の表示の設定になります

※(何も表示しない・新しい切れた面を作成・既存のマテリアルで面作成)

・Cap Material → 切れた面のマテリアルの設定をします。

SliceProceduralMeshの設定

それ以外に破片に対しての物理シミュレーションや衝撃などの動作を設定します。

当たったProceduralMeshに衝撃を与えて動かす処理

あとはFirstPersonCharacterのBPで弾をSpawnActorしている箇所に、

今回コピーして作成したBP_ProceduralBulletに変更します。

Spawnする弾のBPを変更する

設定して実際に動かしてみると下の絵のように物体をバラバラにできます。

※紫色の箇所が切った段目になります。

ProceduralMeshで切った結果

以上がProcedruralMeshの設定は以上になります。

※StaticMeshならいろいろ切れるのでぜひ試してみてください(^ω^)

・目次に戻る

切る角度の設定を行う

キャラクター側で操作するボックスの角度を元に切れる平面の法線を指定します。

まずProceduralMeshを切る弾の方で切られる平面の法線を指定します。

弾の方の切る角度をVectorで指定

キャラクター側でメッシュを切る角度が、

どうなっているかわかるようにCubeを設定して表示します。

銃に設定しているSphereの箇所にCubeを追加します。

キャラクター側での角度を知るためのキューブを追加

Cubeの角度をプロシージャルメッシュの切れる角度を指定するので、

キューブの角度を変更できる処理を追加します。

まず角度用の変数と変更用のマクロを指定してます。

※マクロについては引数に合わせて角度を加算したり減算しています。

角度用変数とマクロの作成

マウスホイールを上下に回転させて角度を変更します。

ホイールの回転に合わせた処理の表示

キューブの角度を弾のPlaneNormalに値を渡します。

弾があるかどうかをチェックして角度を渡してあげます。

角度を発射する弾を設定する

上記の処理を追加すると下記の画面のようにブロックの角度に合わせて切れます。

※横方向に切った場合

横方向に切ったときの場合

※縦方向に切った場合

縦方向に切った場合の処理

今回はこれで以上になります。

実際にいろいろ出る弾をブレードとかにした場合の結果は下のツイートになります。

・目次に戻る