UE5初心者が「Spline(スプライン)上で物体を動かす方法」についてまとめるぜ!
▼本文は「続きを読む」からどうぞ~!
◆「Spline上で物体を動かす方法」の参考動画(必見)
▲決められたルートを規則的に巡回する物体(アクターBP)を作る解説動画。
▲ベルトコンベアのように物体をSplineで動かす方法(日本語)。
◆Spline上で物体を移動させる方法
今回は1番目の参考動画(英語)について復習用記事をまとめてみた。
- 【物体の移動方法メモ】
①直線移動は「InterpToMovement」か「Timeline」ノードがオススメ。
②曲線移動~複雑な折れ線移動は「Spline」がオススメ。
③相対移動は「Lerp」ノードが便利かも。
早速、「Spline」コンポーネントの使い方を見ていこう!
①ルートになる「BP_Path」作成
- [Actor]として[BP_Path]を作る。
- [BP_Path]のビューポートを開く。
- 左上[+Add]から[Spline]を追加する。
②動かす物体「BP_PathCube」作成
- [Actor]として[BP_PathCube]を作る。
- [BP_PathCube]のビューポートを開く。
- 左上[+Add]から[Cube]を追加する。
③[BP_PathCube]のイベントグラフ編集
▼イベントグラフを以下のように編集する。
※[Get Actor Of Class]ノードの[Return Value]から線を伸ばし、[Promote to Variable]で[Path]という名前の変数に昇格しておく。
※カスタムイベント[Start Moving]を作って呼び出す。
※[Timeline]ノードをダブルクリックして編集する(以下参照)。
- 【Timelineノードの編集】
①中央左上[+Track]から[Add Float Track]で新規トラック[Alpha]を作成。
②タイムライン上で右クリ>[Add key~]>[Time]0・[Value]0。
③再び右クリ>[Add key~]>[Time]5・[Value]1。
④[Loopアイコン]をクリックして有効化する。
【BP_PathCubeの解釈補足メモ(※間違いがあるかも!)】
- Timelineの[Alpha]は、「経過時間に対してどのくらい移動するか」を決定する値。
(Splineの始点が0、終点が1。経過時間と比例する進行割合のような値) - [Lerp]に[Alpha]を入力すると、経過時間に応じて、Spline始点(LerpのA入力)から終点(LerpのB入力)間の進行距離割合が滑らかに補完されて増加していく。
- [Get Transform at Distance Along Spline]でLerpから経過時間に基づく現在位置の予測情報を取得し、トロッコの現在位置データとして変換出力。
(=実際に動かすための移動先位置や角度を取得) - 得られた現在位置データを[SetActorLocationAndRotation]へ渡して移動させる。
- Timelineノードのループ設定がONになっているため、Spline終点まで行くとまたSplineの始点から同様に移動を再開(=周回)する。
④レベル上にルート(Path)と動く物体(PathCube)を配置
- ルート用の[BP_Path]をドラッグしてレベル上へ配置する。
- ビューポート上のSplineを[Alt]+クリックして、ルートの中継ポイント配置(=経路を決める)。
(※規則的な図形っぽいルートを作る時は、中継地点に右クリ>[Spline Generation Panel]から形を整えると楽) - 経路の最終地点を選択後、[Detail]欄>[Closed Loop]にチェック(=始点と終点が自動で繋がる)。
- 動く物体[BP_PathCube]を配置する。
- [BP_PathCube]の座標に、[BP_Path]の座標をコピペする。
ここまで終われば、[BP_Path]のルート上で[BP_PathCube]が動くようになる。
◆追記:「触ったら即死する暴走トラック」を作る方法
【24/04/29】最近BPIという概念を覚えたので、ゲームっぽく改造してみた!
①ブループリントインターフェース[BPI_TroubleEvent]を作り、[▼FUNCTIONS]の中に[Track]という関数を作る。
②[BP_PathCube]のStaticMeshを好きな物に変えて、[BoxCollision]も追加しておく。
▼以下のようにノードを追加する。
③[BP_ThirdPersonCharacter]の上部[ClassSettings]ON>右下[Implemented Interfaces]に作ったBPIを指定しておく。
▼プレイヤーBPのDetails欄でTag「player」を追加したらイベントグラフも編集する。
あとはタイムラインの秒数調整で移動速度を上げたり、Splineの配置を嫌らしくしたりすれば、のんびりお散歩する箱からワンパンしてくる暴走車へ生まれ変わると思う。
「ワンパン暴走車をルート走行させたい」という素人の過激な発想が案外簡単に実装できてしまうのはさすがUE!
(※ちゃんとタイヤまで動かしたい場合、このやり方だと微妙かも)
◆学習したノードのメモ
- [Get Transform at Distance Along Spline]ノード
Spline上にある物体の情報(位置や回転角度)を取得する。 - [Get Spline Length]ノード
Splineの長さを取得する。 - [Lerp]ノード
数値比較後に差分を補完してくれるノード。
※[Alpha]項には0~1以内の値を入力! - [Get Actor Of Class]ノード
レベル内にある全アクターの中から特定のアクターを探す。
▲[Timeline(タイムライン)]ノードの詳しい解説記事。
◆後で学びたい発展形
この記事では初心者でも簡単にできるアクター(物体)の移動方法について学んだ。
次回以降、キャラクターをSpline沿いに動かす方法も調べてみたい!
(以下にYouTube内で気になった動画をメモっておく)
▲特定の範囲内に入ったプレイヤーキャラをSpline上で移動させるシステムについて解説している動画(※UE4)。
▲Spline沿いに巡回するNPCを実装する記事は色々あったけど、この記事が1番綺麗に実装しているように見えるので、ビヘイビアツリーを理解したら真似たい!!
▲NPCをSplineに沿って移動させるシステムの解説記事②。
▲かなり複雑なやり方の解説記事(自分みたいな初心者にはちょっと難しそう)。