Splineで遊ぼう!~Splineでちょっとしたプロシージャルメッシュ作成~
ActorクラスのBPを作成。
名前は何でも。(自分は「BP_Spline」にした。)
~Splineコンポーネント追加~
「Spline」というコンポーネントを追加。
~ConstractionScript~
~変数~(全部編集可能にする)
NumberOfMeshs・・・配置するメッシュの数
OrientToSpline・・・メッシュの向き(角度)をSplineの角度に合わせるか??
NumberOfMeshsで配置するメッシュの数を決める。
デフォルト値は「2」にした。
配置するメッシュの数が「0」、つまりNumberOfMeshsが「0」の場合、ブランチの条件によりFalseに処理が流れる。
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」
となる。
この値は、配置するメッシュの位置を決める値となる。
この値を、GetLocationAtDistanceAlongSplineでVector値に変換。
これを、InverseTransFormLocationで相対座標に変換。
相対座標に変換した値をMakeTransFormで一纏めにして、AddStaticMeshComponentノードのRelativeTransFormに繋ぐ。
これで、メッシュを指定した数の分だけ配置が可能になった。
最後に、GetRotationAtDistanceAlongSplineでSplineの角度をワールド座標の角度に変換。
Distanceには、先程の「Indexの値×100」の値を繋ぐ。
GetRotationAtDistanceAlongSplineでワールド座標に変換したSplineの角度を、SetWorldRotationに渡す。
その前に、ブランチを挟む。
ConditionがTrue・・・メッシュの角度をSplineの角度に合わせる。
ConditionがFalse・・・合わせない。
さてどうなっているか!?
見事!(自己満)
ここで整理しよう。
NumberOfMeshsの値が「2」だった場合。
相対座標、X「0」とX「100」の位置にメッシュが配置される。
「0」「100」は、先程やった「Indexの値×100」の奴だ。
0×100=「0」・・・1個目に配置するメッシュの位置
1×100=「100」・・・2個目に配置するメッシュの位置
となる。
まあ、Splineは昨日触ったばっかなので、色々違う部分はあるかもしれないw
その場合は遠慮なく指摘してほしい。
それではまた!^^ノシ