BLOGブログ

2014.11.26UE4UE/ Blueprint

[UE4] スプライン上を動く足場の作り方

改訂バージョン: Unreal Engine 4.19

今回は「SplineComponent」を使って、スプライン上を移動する足場を作りたいと思います。
ただし移動用のスプラインはレベル上に複数配置するものと仮定し、スプライン上を動くものも様々な種類のアクターに対応できるようにしたいため、スプラインと足場とでそれぞれアクターを分けたいと思います。

 

MySplineActorの作成

まずは「SplineComponent」を内包した「Actor」を作成します。
コンテンツブラウザで右クリックをし、「CreateBasicAsset」から「Blueprint Class」を選択、「Actor」を選んで名前を「MySplineActor」とします。
「MySplineActor」を開き「Component」モードの「AddComponent」から「Spline」を選択して追加します。

AddComponent

また、デバッグ表示用に「TextRender」のComponentを追加する事をオススメします。Details→Rendering→「Hidden in Game」にチェックマークを付けるのを忘れないようにしましょう。

次に「MySplineActor」に対して他のアクターからスプラインの座標などを取得しやすい用に関数を追加します。
今回は

GetCurrentLocation関数 移動量を与えるとスプラインの座標を返す
GetSplineLength関数 スプラインの長さを返す
IsArrived関数 スプラインが終端まで到着したかどうかを返す

の3つの機能を作りたいと思います。

 

 

GetCurrentLocation関数

単純に進んだ距離から座標だけを取得する場合は「SplineComponent」の「GetLocationatDistanceAlongSpline」関数を呼び出すだけで大丈夫ですが、使いやすいようにループするかどうかを指定することで、スプラインの始点と終点が繋がる用に実装します。

※LocalLengthに一度値を保存しているのは、ループ指定時に移動距離がスプラインの長さを超えた場合のために剰余計算で移動距離を再計算して値を更新するためです。

GetSplineLength関数

こちらは単純に「SplineComponent」の「GetSplineLength」を呼び出します。

GetSplineLength

 

IsArrived関数

こちらも単純に「SplineComponent」の「GetSplineLength」の値と、引数の進んだ距離の値を比較するだけで実現できます。

IsArrived

 

これ以外にも外部のアクターがスプラインを参照するにあたって取得したい情報があれば関数化して取得できるようにしましょう。

スプラインの編集

これで「MySplineActor」の準備が整いました。次にレベル上に「MySplineActor」を配置して実際にスプラインを引きたいと思います。

スプラインポイントを選択し、移動モードの状態で「Alt」キーを押しながらドラッグするとスプラインポイントが新しく追加されます。

splinePointSelect

各スプラインポイントを調整したい場合は、移動モードでスプラインポイントの移動ができ、回転モードでスプラインのひねり具合、スケーリングモードで広がり具合を調整できます。

splinePointScale

 

レベル上にスプラインを配置し終えたら、次は足場を作ります。

 

足場の作成

コンテンツブラウザで右クリックをし、「CreateBasicAsset」から「Blueprint Class」を選択、「Actor」を選んで名前を「Scaffold」とします。

「Scaffold」を開いて、「Component」の「AddComponent」から「StaticMesh」を選択して追加します。メッシュには足場になるモデルを参照するようにしましょう。

続いてアクターの座標をレベルに配置しているMySplineActorから参照して移動するようにします。変数に「MySplineActor」の参照型変数、移動距離を保持するFloat型変数、設定用の移動スピードを保持するFloat型変数を追加します。

 

 

あとは「EventTick」で移動スピードから移動距離を更新し、スプラインの座標を取得してアクターの座標を設定します。
この時、「MySplineActor」の「GetCurrentLocation」関数の引数である「Loop」にチェックマークを入れることでスプラインの再生を繰り返す事ができます。

EventTick

 

最後にレベル上に配置している「MySplineActor」を参照するようにすれば、「Scaffold」がスプライン上を移動する事ができます。

play1play2play3

このようにSplineをActor化させて分けることで、足場のみならずキャラクターなど様々なアクターも同じスプラインを参照し動かす事ができますし、動的に参照したいスプラインを切り替えやすくなります。