4.19以前、「SplineComponent」を使用して、動く足場の作り方を紹介しました。今回はそれを応用し、UE4.7から実装されたコンポーネントのブループリントを作成できる機能を使用し、スプライン移動用のコンポーネントの作り方をご紹介します。コンポーネントにするメリット以前は、レベルに配置するスプラインのアクター「MySplineActor」と、それを参照して移動するアクター「Scaffold」の2種類を作成しました。この方法では、移動するアクターを作るたびにスプライン移動する機能を基底クラスに持つ必要がありました。そこでUE4.7の新機能であるコンポーネントのブループリント化を利用すれば、簡単にアクターをスプライン移動させることが出来るようになる他、既にレベル上に配置した特定のアクターに対しても簡単にスプライン移動させる事ができるようになります。MySplineActorの改良スプライン用のアクターである「MySplineActor」は以前作成したものをそのまま利用できますが、今回の使用にあたり、少し改造しました。GetCurrentLocationAndRotation関数GetCurrentLocation関数を改良し、向きと回転情報も同時に取得するようにしました。関数名も機能を追加した事で変更しました。以前はとくにそのままでしたが、値を取得するだけのIsArrived関数やGet系関数は純粋関数に変更しました。自作していたGetSplineLengthは特に拡張の必要性を感じなかったので削除しました。Component」を選んで名前を「SplineMoveComponent」とします。この後は通常のクラスブループリントとほぼ同じです。・何も指定しないとスプラインの終端まで移動した後止まる・LoopをTrueにするとスプラインの終端まで移動したら始端へワープする・ReturnをTrueにするとスプラインの終端まで移動したら始端に向かう。始端に戻ったら止まる・ReturnとLoopをTrueにするとスプラインの終端と始端を行ったり来たりする・Pause関数を呼び出すと一時停止する。・AddMoveDistance関数で現在の位置から指定の移動量分進む、もしくはマイナス値で戻る・SetMoveDistance関数で任意の移動量を指定する・ForceMove関数で強制移動する。移動量をセットしていますが、場合によってForceMove関数を呼び出して強制移動までセットにするとよいかもしれません。内部でSetMoveDistance関数を呼び出しているので、SetMoveDistance関数の仕様を変更するとその影響を受けます。ForceMove関数コンポーネントの持ち主であるオーナーのアクターの座標を変更します。今回は回転情報も使用するようにしました。スプラインのループ指定は戻る設定の際は使用しないので注意が必要です。今回移動の停止はTickのEnabledを切り替えることで実現することにしました。Tick」の最初に分岐する方法でも問題ありません。Tick毎フレームの移動量を算出し、オーナーのアクターを移動させます。Loop設定やReturn設定によって始端もしくは終端到着後にそれぞれ専用の処理を行います。自分で作成したコンポーネントは、既存のコンポーネントと同様にクラスブループリントの「AddComponent」から追加できます。UE4.7から、新たにレベルに配置している特定のアクターにのみ追加することも可能になりました。これでスプラインを使って色んなアクター(スタティックメッシュやカメラ、キャラクターなど)が移動できるようになりました。改良の余地はあると思いますので、色々と自分なりに改造してみましょう。