【UE5】エディターで編集できるGeometry Toolを作成する
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/GeometryScript-Unreal-Editor-2024-07-23-14-52-41.gif)
Unreal Engineには、Geometry Scriptというプラグインがあり、それを導入することでエディターでメッシュを変形させることができるDynamic Meshを使用できます。
今回はこの機能を使用して位置変更可能な丸窓付きの壁を作成し、Static Meshに変換しようと思います。
Geometry Scriptの有効化
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-2-1024x65.png)
PluginからGeometry Scriptを有効にします。一度プロジェクトの再起動を行ってください。
有効にできると、BluePrintの一覧に「Dynamic Mesh Actor」や「Generated Dynamic Mesh Actor」が追加されます。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-3.png)
Generated Dynamic Mesh ActorからBluePrintを作成する
コンテンツブラウザを右クリックし、ブループリントクラスを追加します。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-4.png)
親クラスにはGenerated Dynamic Mesh Actorを使用します。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-5.png)
DynamicMeshを出す
Editorで動かせるツールを作る際はこのノードから始まります
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-6.png)
Append Boxにつなげることによってボックスを出すことができます。Dimensionはボックスのサイズです。今回は壁なので横長で薄いBoxにします。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/BP_DynamicMesh-EventGraph-1024x510.png)
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-7.png)
ボックスがビューポートに表示されました
円柱でくりぬく
ボックスの後に続けて、円柱を追加してくりぬく処理を書きます。
Allocate Compute MeshでTarget Meshを取得し、Append Cylinderで円柱を追加します。
追加したシリンダーでApply Mesh Boolというノードを使って引き算を行います。OperationをSubtractに変更することで引き算することができます。
最後にRelease All Compute Meshsを行い計算を開放します。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/BP_DynamicMesh-EventGraph_0-1024x378.png)
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-8.png)
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-9.png)
ビューポートの四角から円柱が引き算されました。
ビューポートから円柱の位置を調整できるようにする
このままではエディタで操作できない為、操作用のギスモを追加し円柱の位置を操作できるようにします。
Location 変数を追加します。インスタンス編集可能にして3Dウィジットを表示にチェックを付けると、エディターでギスモが表示されるようになります。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-10.png)
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-11-1024x405.png)
レベルに置くと、このようなギスモが表示されるようになります。
ギスモと連動するように、CylinderのTransformを分解してLocation 変数の位置を入れます。今回は奥行がいらないのでさらに分解して入力しています。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-12.png)
障子を追加する
障子を追加していきます。
先程の工程とほとんど同じですが、今回は実際のStaticMeshをDynamicMeshとして使用していきます。
Copy Mesh From Static Meshでメッシュの情報を取得しAppendMeshにコピーします。
位置はくりぬかれた部分に一致していてほしいのでLocation 変数からStaticMeshの座標ズレ分を引いて入力します。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-13.png)
これを木枠と障子紙の左右分行います。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/BP_DynamicMesh-EventGraph_1-1024x540.png)
障子が追加されました。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-14.png)
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-15.png)
マテリアルを付ける
この時点で連動しているのですが、このままStaticMeshに変換するとマテリアルが1つになってしまうのでMaterialを分解していきます。
Configurate Material Setを使用して、マテリアルエレメントを作成します。
本来なら壁+木枠+障子紙の三つで事足りるのですが、バグで0番目のマテリアルが認識されないので配列は4つ分作成します。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-16.png)
0:捨てマテリアル
1:木枠
2:障子紙
3:壁
が選ばれています。
各Appendノードの後ろにRemap Material IDsを追加します。
To Material IDには上の配列の中から使用したいマテリアルの番号を指定します。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-17.png)
エディターで操作できるToolが完成しました。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-18.png)
全体図
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/BP_DM_CreateMarumado-EventGraph_0-1024x653.png)
StaticMeshにベイクする
On Rebuild Generated Meshはパッケージやスタンドアロンでは使用できないので、実際に使用するにはStaticMeshにしてしまう必要があります。
関数から+を押して関数を追加します。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-19.png)
詳細からエディタで呼び出すにチェックを付けることで、エディタ上でこの関数を実行できるようになります。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-20.png)
Dynamic Mesh ComponentからGet Dynamic Meshを行い、現状のメッシュを取得します。
Create New Static Mesh Asset from Meshを行うことで、Asset Path and Nameの場所と名前にStaticMeshが作成されます。
File Pass やMesh Nameなどの変数はインスタンス編集可能にしておくとエディタ側で変更することができます。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-21.png)
StaticMesh化を実行する
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-22-1024x671.png)
レベル上にBPを置いてギスモを操作してお好みの位置に窓を配置した後、詳細のデフォルトから先ほど制作した関数(今回はCreate Static Mesh)を実行することでStaticMeshがファイルパスの場所に作成されます。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-23.png)
マテリアルをエレメントに設定すると、そのままStaticMeshとして使用することができます。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-24-1024x803.png)
このような和室を作ることも可能です。ぜひいろいろなGeometry Toolを作成してみてください。
![](https://dipross.co.jp/eng/wp-content/uploads/2024/07/image-25.png)