Ue4で近づくとルートに沿って進み離れると止まるようなbp

UE4で近づくと道を案内し、離れると止まるようなBPを作ろうとしています。

一度だけNiagaraのエフェクトが黄色い範囲に入っている間だけ
Splineのルートに沿って進むというものを考えています。

現状ではSplineのルートに沿って進む状態で、
Splineの最後に着くと最初に戻り、ループしてしまいます。

初心者で理解も浅く、どうしても方法が分からないので、
わかりやすく教えていただけると幸いです。
よろしくお願いします。

BlueprintのTimelineというノードを使ってみてはどうでしょうか。

Get Location at Distance の Distanceを Timeline でアニメーションさせます。

似たことを Unreal Engine 4 アクションゲーム ブループリント入門 - 秀和システム あなたの学びをサポート!
「5-12 浮遊する足場」で読んだ気がします。

1 Like

先ほど書くの忘れてしまいましたが、2つめの「離れると止まる」はSphereのEndOverlap イベントでアニメーションを停止する処理を追加できると思います。

Timelineの場合はStopに入るようにするとか、あるいはTickでAddActorLocationを続けていた場合はそれを止めるようなフラグを追加するなどです

1 Like

回答ありがとうございます!

教えていただいた方法でNiagaraがスプラインに沿って移動するところまでは出来たのですが、
範囲に入っている時だけ動き、出ると止まりを繰り返す処理がうまくいきません。

初歩的なことかもしれませんがご教授いただけると助かります。
よろしくお願いします。

タイムラインを

  • BeginOverlapでPlay from Startを実行
  • EndOverlapでStopを実行

とするとどうでしょうか。PlayとStopの処理は別なイベントから開始されるのでイメージはこんな感じです。
image

だるまさんが転んだのように「出たときにピタッと止まる。入ったときは止まったところから再開」としたい場合はタイムラインの再生はfrom StartではなくPlayを使い、FinishedでNew Timeを0に設定し直すなどのプログラムが必要になるかもしれません。

1 Like

回答ありがとうございます。
今までの説明が不明確でした。
おっしゃる通り、
「出たときにピタッと止まる。入ったときは止まったところから再開」が目標です。

New Timeを0に設定し直すBPの作り方が分かりません。
教えていただけると助かります。
また、何度も繰り返して反応させることは可能なのでしょうか?

繰り返し質問申し訳ありません。
よろしくお願いします。

「出たときにピタッと止まる。入ったときは止まったところから再開」は、以下の通りです。
image

・PlayはStopしたところから再開
・Play from Startは最初から

なので、つなぐところをPlayに変えればできると思います。

私の投稿でSet New Timeについて書いたのは

最後まで行ったらタイムラインを最初に戻さないといけないのでは?

と思い込んでしまったためでした。

しかし最後に行ったらもうそれでDestroyするとか、止まったままでOKだったりするなら必要無いです。

それはそれとして、一応参考のために Finished でNew Timeを0にするスクリーンショットを貼り付けます。

タイムラインを作ると自動的にBlueprintの変数も作られると思うのですが、
それを持ってきてSet New Timeノードを実行しています。

Spline Animation みたいな名前つけといた方が良かったかも。

1 Like

丁寧にありがとうございます!
ゴールで止まる際は必要ないんですね!

現在のBPで範囲内からスタートするとniagaraが移動せず、
一度範囲から出てから入ると動きますが、次に範囲から出てしまうと、
再度範囲に入った際に移動しません。
また別のスプラインのルートでは二度だけ反応しましたが同じように動かなくなってしまします。
最後までたどり着けずに困っています。

範囲に入るたびに何度も移動させることが出来るというものであってますでしょうか?

スプラインのルートの配置に問題がある可能性もあるのでしょうか?
原因が分かれば解決方法を教えていただけると助かります。

最初に動いているところから始まるのなら、このスクリーンショットのようにBeginPlayでタイムラインを開始するのはどうでしょうか。

image

その他はすぐにわからないので以下のスクリーンショットのようにPrint Stringを組み込んで1つずつ意図通りになっているか
確かめていくしかないと思います。

・Overlapのイベントが発生しているか
発生していたら画面に文字が出るはず
・新規Track0の値は変化しているか
BeginOverlapが発生したら 0.0 → 0.1 → みたいに画面数値が増えながら表示されるはず
・Finishedが表示されるか
例えば最後まで行ってないのにFinishedがあるかどうか調べる

後は移動するのがNiagaraではなくてSphereにしてみたらどうか確かめてみるとか。

1 Like

原因が分かり、解決しました!
親子付けが出来ていなかっただけでした!

丁寧な説明で分かりやすかったです。
とても助かりました!
ありがとうございました!