🏃‍♂️

【UE5】splineカーブ上を移動するキャラクターを作る方法

に公開

レベルに配置したsplineカーブの上を移動するキャラクターを作る方法をご紹介します。
![]

1.splineカーブのBPを作成

レベルに配置するカーブだけのブループリントを用意します。
種類はアクターで作成して、追加から「スプラインコンポーネント」を追加します。ブループリント上でカーブの調整は行いません。作成したらレベル上に配置してください。

2.カーブの形状調整

レベルに配置したカーブをキャラクターが移動させたい形状に調整します。四角い表示がカーブポイントで、位置や角度を調整することで複雑な形にすることができます。このポイントは選択した状態でAltを押しながら移動すると増やせます。

詳細のClosed Loopにチェックを入れてるとカーブを閉じることもできます。
ループする動きを作る場合は閉じたほうがいいかと思います。

3.キャラクターのBPを作成

カーブを移動するキャラクターのブループリントを作成します。サンプルではポーンで作ってマネキンのスケルタルメッシュを追加しています。splineの移動ロジックは後程このブループリントで作っていきますが、その事前準備として以下の設定を行います。設定が終わったらこちらのブループリントもレベルに配置します。

  • スケルタルメッシュの回転Zに-90を設定
    デフォルトだと横を向いた状態になってしまうので(データによっては必要なし)
  • スプラインのBPをオブジェクト参照する変数の作成
  • インスタンス編集可能にチェック

4.キャラクターBPとsplineBPの紐づけ

レベルに2つのブループリントが存在する状態で、キャラクターブループリントの詳細にデフォルトという項目があるかと思いますので、ここにsplineのブループリントを設定します。インスタンス編集可能の設定をしておかないとデフォルト表示が出てこないのでご注意ください。

5.キャラクターBPに移動ロジックを構築

まずはFloatで2つの変数を作成します
・Distance:進む距離を記録しておく変数、デフォルト値は0
・Speed:進むスピードを設定する変数、デフォルト値はとりあえず500ぐらい

キャラクターの位置を設定

Tickイベントで毎フレーム計算していきます。
「GetTransformatDistanceAlongSpline」ノードはsplineの長さに沿った距離を渡すとspline上のその点に対応するTransformを返してくれるので、その値を「SetActorTransform」で設定します。ワールド座標を取得したいのでCoordinateSpaceはWorldにしてください。
Distanceにはデフォルトで0の値が入っているので最初はカーブの始点にキャラクターがいる状態になります。

次のフレームで進む距離を計算

1フレームで進む距離はTickのDeltaSecondsとSpeedを掛けた数字をDistanceに足すことで計算できます(添付画像はTickが見切れています)この計算した値をDistance変数に設定する、というのが基本的な流れです。

ただDistanceがカーブの長さを超えると計算できなくなってしまうので、0で初期化してカーブの始点からまた再スタートするようにしています。カーブの長さは「GetSplineLength」で取得できます。

Discussion