【UE5】Geometry Scripting：Dynamic MeshをStatic Meshとして保存する３つの方法

[link-1]: https://docs.unrealengine.com/5.2/en-US/geometry-scripting-through-blueprints-in-unreal-engine/

:::note info
この記事で使ったUEのバージョンはUE5.2.1です。
:::

この記事は、Geometry Scriptingで作ったメッシュ(Dynamic Mesh)をStatic Meshとして保存する方法のメモ。

下記に３つの方法を書いている。
1. Modelingモードを使って、Static Meshにコンバートする。
1. Copy Mesh To Static Mesh関数を使って、既存のStatic Meshアセットに上書きする
1. Create New Static Mesh Asset From Mesh関数を使って、指定したパス・アセット名で出力する

# 方法１：Modelingモードを使ってStatic Meshにコンバートする

Modelingモードの「Convert」を使えば、Dynamic MeshをStatic Meshにコンバートできる。
手順は以下の動画の通り。
<iframe width="949" height="400" src="https://www.youtube.com/embed/widm7K-YNis" title="【UE5.2】Dynamic Meshを Static Meshとして保存する方法（その１）" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

:::note warn
この方法は、選択したDynamic Meshが、コンバート後のStatic Meshに置き換えられてしまう。作業しているDynamic Meshがレベルから居なくなって欲しくない場合は、もとのDynamic Meshを複製して、複製した方をコンバートするとよい。
:::

1. コンバートしたいDynamic Meshを選択する。
1. モデリングモードに切り替える。
1. Transformカテゴリにある、Convertコマンドをクリックする。
1. Modelingタブの上の方、Output Typeが「Static Mesh」になっていることを確認する。
1. Modelingタブの下の方、New Asset Locationを「Current Folder」にしておくと、コンバート後のStatic Meshアセットをカレントフォルダに出力してくれる。
1. ビューポート下辺中央の「Accept」ボタンを押すとコンバートされる。

# 方法２：Copy Mesh To Static Mesh関数を使って、既存のStatic Meshアセットに上書きする

:::note info
これはUE公式ドキュメントの「[Geometry Scripting through Blueprints][link-1]」に掲載されている方法である。
:::

Dynamic Meshを持ったアクタで、以下のような Call In Editor関数を作る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/fa3fb30c-ee44-cd11-07ba-e8622054fb52.png)
あとは、Bake Target Assetにセーブ先となるStatic Meshアセットをセットして、このCall In Editor関数を動かせばよい。

例えば、次の動画のような手順でコンバートする。
<iframe width="949" height="400" src="https://www.youtube.com/embed/56HiLpK4hjY" title="【UE5.2】Dynamic MeshをStatic Meshとして保存する方法（その２）" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

:::note warn
関数Copy Mesh To Static Meshは、指定された既存のStatic Meshアセットに、現在のDynamic Meshの内容を上書きする。大事なアセットにうっかり上書きしないように気を付ける必要がある。
例えば、Starter Contentsなどから適当なStatic Meshをコピーして、それをコンバート先として指定すると良い。
:::

:::note warn
なお、Copy Mesh To Static Meshは、マテリアルは作ってくれない。コンバート後に手動でマテリアルを付け替えたり、足したりする必要がある。
:::

## Copy Mesh To Static Meshの上書きのメリット

Copy Mesh To Static Meshによる上書きはデメリットにも見えるが、メリットもある。それは、上書き先のアセットが既にレベルに置かれている場合である。
Dynamic Mesh側を編集後、Copy Mesh To Static Meshで上書きをすると、レベルに置かれたすべてのアセットが最新の状態に更新される。これのおかげで次のGIF動画のように「エディットして、反映する」の繰り返しがサクサク行えるようになる。

![20230826_DynamicMeshToStaticMesh04.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/6dd1bb25-8701-bbda-6c1d-ff02afd7acfd.gif)

:::note info
これについても、UE公式ドキュメントの「[Geometry Scripting through Blueprints][link-1]」に記載されている。
:::

# その３：Create New Static Mesh Asset From Mesh関数を使って、指定したパス・アセット名で出力する

Dynamic Meshを持ったアクタで、次のような Call In Editor関数を作る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/e76f3f2d-3992-3b25-24d2-8f109a48db8d.png)

この関数は、Bake先となるパス・アセット名を指定すると、そこにStatic Mesh Assetを作成してくれる。

例えば、次のような手順でコンバートする。
<iframe width="949" height="400" src="https://www.youtube.com/embed/9bnJzigIrdI" title="【UE5.2】Dynamic MeshをStatic Meshとして保存する方法（その３）" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

こちらは、必ず一定のアセット名で出力できるので、例えば、自動的に複数のバリエーションのStatic Meshアセットを出力するような場面で、役に立ちそうだ。