【UE5】Procedural Meshによるメッシュ切断

プログラマー尾関です。今回はUE5でProcedural Meshを使ったメッシュ切断方法について解説します。

BPクラスの作成

作成

まず「ブループリントクラス > アクタ」を作成します。

名前は「BP_Cube」にしておきます。

コンポーネントの追加

コンポーネント階層に「キューブ (Cube)」「ProceduralMesh」を追加します。

コンポーネント階層から、スタティックメッシュ (Cube) を選んで詳細タブから “Static Mesh” を「SM_Cube」に変更します。

またメッシュのマテリアルをわかりやすい色に設定しておきます。

SM_Cubeの編集

コンテンツドロワーから「SM_Cube」を開きます。

詳細タブから “Allow CPUAccess” にチェックを入れて、CPUからでもメッシュ情報にアクセスできるようにします。

当たり判定を作成するためにコリジョンから「自動凸型コリジョン(オートコンベックスコリジョン)」を選びます。

凸型分解タブから「適用」ボタンをクリックします。

BP_Cube (コリジョン設定)

ProceduralMeshのコリジョン設定

BP_Cubeに戻って「ProceduralMesh」を選択。

プロシージャルメッシュ > Use Complex as Simple Collision” のチェックを外して、ポリゴンの単純化コリジョンを無効にします。

物理 > Simulate Physics” にチェックを入れて、物理シミュレーションを有効にします。

Static MeshをProcedural Meshにコピーする

グラフを開いて、Construction Script にコピー処理を書きます。

弾の設定

Collision Component の設定

コンポーネント階層から “Collision Component” を選択します。

詳細タブからコリジョンプリセットを「BlockAll」にします。

Event Hitがあれば削除

On Component Hitで衝突判定を行いたいので、Event Hitがある場合は削除します。

衝突イベントの作成

弾のコンポーネント階層から、CollisionComponentを選びます。

詳細タブの「イベント > On Component Hit」の「+」ボタンをクリック。

“On Component Hit” の “Hit” パラメータを右クリックして、「構造体ピンを分割」。

グラフを以下のように組みます。

Slice Procedural Mesh でメッシュ分割できます。

■パラメータ説明

ノード名説明I/Oパラメータ説明
Slice Procedural Meshメッシュのスライスinin Proc MeshProcedural Mesh Componentスライスする対象のメッシュ
inPlane PositionVectorワールド空間でスライスに使用する平面のポイント
inPlane NormalVectorスライスに使用する平面の法線。平面の正の面のジオメトリが保持されます
inCreate Other Halfbooltrueの場合、スライスジオメトリの残り半分を使用して追加の Procedural Mesh Component が作成されます
inCap OptionEProcMeshSliceCapOptionスライスする平面で「キャップ」ジオメトリを作成するか、またその方法No Cap (何も表示しない): 切断面を表示せず、中身が空洞になりますCreate New Section for Cap (新しい切断面を生成): 完全に新しい断面を生成します。これにより、切断面がきれいに塞がれますUse Last Section for Cap (マテリアルで切断面を生成): 指定したマテリアルを使用して切断面を生成します
inCap MaterialMaterial Interfaceキャップに新しいセクションを作成する場合、このマテリアルをそのセクションに割り当てます
outOut Other Half Proc MeshProcedural Mesh Componentスライスにより新しく作成されたメッシュコンポーネント
Set Simulate Physics物理挙動を有効化inTargetPrimitive Component物理挙動のフラグを設定するプリミティブコンポーネント
inSimulatebool単一の剛体のシミュレーションフラグ
Add Impulse衝撃を加えるinTargetPrimitive Component衝撃を加えるプリミティブコンポーネント
inImpulseVector適用する力積の大きさと方向
inBone NameName力積を適用する剛体の名前 (※Noneの場合はルートに適用されます)
inVel Changebooltrueの場合、Strengthは力積ではなく、速度の変化として扱われます (質量には影響しません)

参考

Follow me!