対象バージョン UE5.2.1
Geometry Scriptingを使うには、Geometry Scriptプラグインを有効にする必要があります。
はじめに
進入禁止エリアなどを作るときに Blocking Volumeアクタをええ感じに並べたりする。ところが標準のBlocking Volumeアクタは箱型なので、その「ええ感じ」が意外と難しかったりする。
一方、Geometry Scriptingを使えば、任意形状の Blocking Volumeを作ることができるので、よりええ感じなボリュームが作れるかもしれない。
Geometry Scriptingで作ったDynamic MeshからBlocking Volumeを作るには「Create New Volume from Mesh」を使う。
次の動画は、
- ①スプラインで囲んだエリアからBlocking Volumeを生成する
- ②スプラインに沿わせたBlocking Volumeを生成する
…を行う自作のEditor Utilityツールの動作の様子である。こうすれば「箱型」に縛られずに、任意の滑らかな形状の進入禁止エリアを作ることができそうだ。
①スプラインで囲んだエリアからBlocking Volumeを生成する
Delaunay三角形分割
まずは、スプラインを囲んだエリアをポリゴン化する方法から。「Append Triangulated Polygon」を使う。
引数「Polygon Vertices」にポリゴン化したい頂点の座標(Vector2D)を渡すと、ええ感じにポリゴン化してくれる。特筆すべきは、凸凹した形でもええ感じにポリゴン化してくれることである。つまり、凸多角形である必要がない。
ドキュメントによると、Delaunay三角形分割を行っているとのこと。
Extrude:ポリゴンの押し出し
スプラインで囲まれたエリアをポリゴン化したら、次はその図形をZ方向(上方向)に押し出して立体にする。ポリゴンの押し出しは「Apply Mesh Linear Extrude Faces」を使う。
ポリゴンの押し出しとは、次のGIF動画のような機能である。
後は、先に述べた「Create New Volume from Mesh」で、この押し出された形状からBlocking Volumeアクタを生成する。
Blueprintグラフ
Editor Utility Widgetで作っている。
ユーザーインターフェース部分はこんな感じ:
パラメータ用のDetails PanelウィジットとButtonウィジットで構成されている。
この中で使われている関数 Is Mobility Staticは、選択されたアクタのRoot ComponentとSpline Componentの可動性(Mobility)が Staticかどうかを判定している。
②スプラインに沿わせたBlocking Volumeを生成する
ポリゴンのスイープ
ポリゴンのスイープとは、2Dの図形をパスに沿って引き延ばすような操作である。
例えば、長方形をスプラインに沿ってスイープすると、次のような形状になる。
これをBlocking Volumeに変換してやれば、滑らかな形状の進入禁止エリアを作ることができる。
ポリゴンのスイープには「Append Sweep Polygon」を使う。
引数「Polygon Vertices」には、スイープしたい図形の頂点の座標(Vector 2D)を渡す。上の図では四角形(4頂点)を渡している。
引数「Sweep Path」には、スイープ形状、つまりスプラインの形状を点列(Transformの列)にして渡す。
後は「Create New Volume from Mesh」で、このスイープ形状からBlocking Volumeアクタを生成すればよい。
Blueprintグラフ
こちらもEditor Utility Widgetで作っている。
ユーザーインターフェース部分はこんな感じ:
パラメータ用のDetails PanelウィジットとButtonウィジットで構成されている。
この中で使われている関数Is Mobility Staticは、選択されたアクタのRoot ComponentとSpline Componentの可動性(Mobility)が Staticかどうかを判定している。
関数Make Base Polygonは、スイープ元の長方形の頂点配列を作成する。
関数Sample Splineは、スプライン上の点(のTransform)を一定間隔でサンプリングする。グラフ内にも書いたが、自作せずとも「Sample Spline To Transforms」という関数が標準で用意されていることに後で気づいた。