【UE5】Splineコンポーネントで基本の地形生成!主要ノードで魅せるBP術
Tutorial Component, Spline, SplineComponent, Splineコンポーネント, Tutorial, UE, UE4, UE5, UnrealEngine, VisualScripting, アンリアルエンジン, カーブ移動, ゲームプログラミング, ゲーム開発, チュートリアル, ロジック構築, 地形生成
今回は、Ultimate Farmingというアセットをもっていたので、こちらで利用されているノードなどについて、勉強していこうと思います!
それではさっそくやっていきましょう!
追記)どうやら有料のアセットでしたので、興味があればご購入してみてください。私は、以前月の無料アセットで入手していたようです。

さっそくダウンロードしてみました!
ダウンロードしたフォルダの直下にブループリントが1つだけ、格納されていたので、こちらのブループリントを開いてみます!

開くとコンポーネントに「Spline」が追加されてました!
✅Splineコンポーネントとは?
・ゲーム内で曲線的なパス(線)を定義できるコンポーネント
Splineコンポーネントは詳細パネルにある(Add Spline Point)各ポイントの位置やタンジェントを編集してカーブを調整することができます。
詳細タブだけではなく、ノードでも制御することが可能です。

他に目を通してみたところ、イベントグラフではなく、関数(ConstructionScript)が設定されてますね

関数の始まりから見ていきましょう!
SplineコンポーネントがGetで配置されており、「Get Number Of Spline Points」ノードが配置されてました。
こちらのノードは、Splineコンポーネントに設定されている「Splineポイントの数を取得する」という役割を持ちます。

なので、イベントグラフに移動して、図のように組み替えてみました!
ブループリントを1つ配置して、ゲームをプレイしてみると・・・

デバッグに「0」と「2」が表示されました。
ということは
Splineコンポーネントに設定されている「Splineポイントは2」であり、関数をしようするときは、Subtructで値を2引くため、「Integer値は0」になるようにノードを組んでいるみたいですね!

文字をいれるとこんな感じになりますかね!?

続いてFor Loopから先を見ていきましょう!
まずは、「Add Spline Mesh Component」ですね
こちらは、「Splineに沿って表示するメッシュのパーツを動的に追加できるノードです」。ブループリント実行中に追加して、形状や位置を個別に制御することができます。
✅Target(Scene Component Object Reference型)
コンポーネントを追加する対象アクターまたはコンポーネント
※通常はfalseで問題なし
✅Manual Attachment(Boolean型)
True:自分でアタッチを設定する
False:自動的にアタッチされる
※通常はFalseで問題なし
✅Relative Transform(Transform型)
コンポーネントの相対位置・回転・スケール

今回ダウンロードしたブループリントには、デフォルトで「SM_Planter_C」が設定されています。
もし、別の何かを設定したい場合には、ここからMeshを変更しましょう!

続いて「DefaultSceneRoot」についてですね。
Splineコンポーネントを配置したときに、デフォルトで設定される変数をゲットで配置したものです。他にルートになるものがなければ、これが親(Root)になります。

✅Attach Component to Component
あるコンポーネントを別のコンポーネントにアタッチ(くっつける)ためのノードになります。位置・回転・スケールの相対性(相対 or ワールド)を細かく制御できます。
Targetはアタッチされる側(子)になり、Parentはアタッチ先(親)になります。
なので今回の場合、Splineに沿って表示される動的に追加されたメッシュのパーツはDefaultSceneRootの子として、アタッチされるということですね。

✅Spline Mesh Component
Spline Mesh Componentの始点と終点の位置・方向を設定するノードです。
※見た目を滑らかにしたり、曲げたりする処理で重要になります。
★こういうときに使用するよ★
・曲がったメッシュをSplineで表現するとき
・複数のメッシュをスプライン上で連結し、自然なカーブを描かせたいとき

✅Get Location and Tangent at Spline Point
指定したスプラインポイントの位置(Location)と接線(Tangent)を同時に取得するノードです。
✅Target(SplineComponent型)
対象のスプラインコンポーネント
✅Coordinate Space(Spline Coordinate Space(Enum)型)
LocalもしくはWorld
✅Point Index(Intefer型)
スプラインポイントのインデックス(0から)

For LoopでGet Location and Tangent at Spline Pointの「Point Index」に流れているInteger値をPrintStringでそれぞれデバッグしてみました。
雑に接続したので、見えづらくてすいません。
流れている値は、もちろんのことですが、上には「0」が流れて、下には「1」が流れています。
なぜ、このような処理を組んでるのかを簡単にお話します!

今回のブループリントをレベル内に配置します。
ブループリント階層の中にある「Spline」を選択し、詳細タブからスプラインポイントの位置を変更すると土壌の大きさが変更されたと思います。
また、マテリアルも崩れず馴染んでいるはずです。

ですが、Get Location and Tangent at Spine Pointの「Point Index」を外し、スプラインポイントの場所を分からなくすると、

Splineポイントは同じになっているが、Mesh自体の大きさなどは、動的に切り替わっていません。
・白い線がSplineです
つまり、必ずスプラインポイントの場所を参照する必要があるということです。
なので、キーの値を取得→キーの場所を取得→StartとEndの場所を渡してあげたというわけです。
ということで今回は以上となります。
SNS
YouTubeとX(旧Twitter)をやってるので、良かったら遊びにきてくださいね!
それじゃあ!また!