【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 | メッシュのスライス | in | in Proc Mesh | Procedural Mesh Component | スライスする対象のメッシュ |
in | Plane Position | Vector | ワールド空間でスライスに使用する平面のポイント | ||
in | Plane Normal | Vector | スライスに使用する平面の法線。平面の正の面のジオメトリが保持されます | ||
in | Create Other Half | bool | trueの場合、スライスジオメトリの残り半分を使用して追加の Procedural Mesh Component が作成されます | ||
in | Cap Option | EProcMeshSliceCapOption | スライスする平面で「キャップ」ジオメトリを作成するか、またその方法No Cap (何も表示しない): 切断面を表示せず、中身が空洞になりますCreate New Section for Cap (新しい切断面を生成): 完全に新しい断面を生成します。これにより、切断面がきれいに塞がれますUse Last Section for Cap (マテリアルで切断面を生成): 指定したマテリアルを使用して切断面を生成します | ||
in | Cap Material | Material Interface | キャップに新しいセクションを作成する場合、このマテリアルをそのセクションに割り当てます | ||
out | Out Other Half Proc Mesh | Procedural Mesh Component | スライスにより新しく作成されたメッシュコンポーネント | ||
Set Simulate Physics | 物理挙動を有効化 | in | Target | Primitive Component | 物理挙動のフラグを設定するプリミティブコンポーネント |
in | Simulate | bool | 単一の剛体のシミュレーションフラグ | ||
Add Impulse | 衝撃を加える | in | Target | Primitive Component | 衝撃を加えるプリミティブコンポーネント |
in | Impulse | Vector | 適用する力積の大きさと方向 | ||
in | Bone Name | Name | 力積を適用する剛体の名前 (※Noneの場合はルートに適用されます) | ||
in | Vel Change | bool | trueの場合、Strengthは力積ではなく、速度の変化として扱われます (質量には影響しません) |