Splineで遊ぼう!~Splineでちょっとしたプロシージャルメッシュ作成~

ActorクラスのBPを作成。

名前は何でも。(自分は「BP_Spline」にした。)

 

~Splineコンポーネント追加~

f:id:Free_Gamer:20180719002709p:plain

「Spline」というコンポーネントを追加

 

~ConstractionScript~

f:id:Free_Gamer:20180719002752p:plain

~変数~(全部編集可能にする)

NumberOfMeshs・・・配置するメッシュの数

OrientToSpline・・・メッシュの向き(角度)をSplineの角度に合わせるか??

 

NumberOfMeshsで配置するメッシュの数を決める。

デフォルト値は「2」にした。

配置するメッシュの数が「0」、つまりNumberOfMeshsが「0」の場合、ブランチの条件によりFalseに処理が流れる。

f:id:Free_Gamer:20180719003000p:plain

NumberOfMeshsの値「2」から1引いた値をForLoopのLastIndexに渡す。

同時にNumberOfMeshsの値「2」から1引いた値をGetSplineLengthの値で割る。

 

GetSplineLength・・・Splineの長さを取得

 

ちなみに、Splineの長さはデフォルトだと「100」

つまり、NumberOfMeshsのデフォルト値には「2」を入れたので、

 

100÷1=「100」

 

になる。

「100」をIndexの値で掛け算する。

FirstIndex「0」

LastIndex「1」なので・・・

 

0×100=「0」

1×100=「100」

 

となる。

この値は、配置するメッシュの位置を決める値となる。

 

f:id:Free_Gamer:20180719003216p:plain

この値を、GetLocationAtDistanceAlongSplineでVector値に変換。

このVector値は、ワールド座標のVectorになる。

f:id:Free_Gamer:20180719004015p:plain

これを、InverseTransFormLocationで相対座標に変換。

f:id:Free_Gamer:20180719004243p:plain

相対座標に変換した値をMakeTransFormで一纏めにして、AddStaticMeshComponentノードのRelativeTransFormに繋ぐ。

これで、メッシュを指定した数の分だけ配置が可能になった。

f:id:Free_Gamer:20180719004656p:plain

最後に、GetRotationAtDistanceAlongSplineでSplineの角度をワールド座標の角度に変換。

Distanceには、先程の「Indexの値×100」の値を繋ぐ。

f:id:Free_Gamer:20180719010313p:plain

GetRotationAtDistanceAlongSplineでワールド座標に変換したSplineの角度を、SetWorldRotationに渡す。

その前に、ブランチを挟む。

ConditionがTrue・・・メッシュの角度をSplineの角度に合わせる。

ConditionがFalse・・・合わせない。

f:id:Free_Gamer:20180719005235p:plain

 

さてどうなっているか!?

youtu.be

見事!(自己満)

 

ここで整理しよう。

NumberOfMeshsの値が「2」だった場合。

f:id:Free_Gamer:20180719012153p:plain

相対座標、X「0」とX「100」の位置にメッシュが配置される。

「0」「100」は、先程やった「Indexの値×100」の奴だ。

 

0×100=「0」・・・1個目に配置するメッシュの位置

1×100=「100」・・・2個目に配置するメッシュの位置

 

となる。

 

まあ、Splineは昨日触ったばっかなので、色々違う部分はあるかもしれないw

その場合は遠慮なく指摘してほしい。

 

それではまた!^^ノシ