K.Y.さん、しんちょくどーですか?

仕事や趣味で知ったこと、つまずいたことを書いています

【UE4】【雑記】PlayAnimationWithFinishedEventノードを複数回実行すると意図せずFinished実行ピンを呼ぶかもしれないという話

PlayAnimationWithFinishedEventノードのFinished実行ピンが呼ばれるタイミングが思ったのと違ったときがあったので整理。(結局は自分の勘違いやったけど)
動作環境はUE4.25.4。

ちなみにPlayAnimationWithFinishedEventノードはWidgetBPで使えるノードでアニメーションの再生とアニメーション終了イベントの呼び出しが一つにまとまったもの。アニメーションを再生して終了後に何か処理をする場合、ノードの配置をすっきり書けるので重宝している。
似た名前でPlayAnimationTimeRangeWithFinishedEventノードがあるけど、入力ピンが違うだけで同じような使い方ができる。

で、思ったのと違う処理になったのがこちら。

PlayAnimationWithFinishedEventノードを使ってアニメーション再生 -> 一時停止 -> 再開 -> アニメーション終了というもの。
この処理を組んだ時、自分の感覚としては「先に実行していたノードのFinished実行ピンは無効化され、2番目のFinished実行ピンだけが実行される」と思ってた。けど、実行してみると1番目2番目どちらのFinished実行ピンも呼ばれる結果に...。

なんでやろ?て思ったけど、PlayAnimationWithFinishedEventノードの中身を検証してみるとこの動作に納得できた。
このノードの中身はどうやらPlayAnimationノードとBindToAnimationFinishedノードを組み合わせた感じになっている。(実際の中身はC++で処理されているので厳密には違うけど)

つまり、PlayAnimationWithFinishedEventノードを通るたびにアニメーション終了を通知するイベントが作成されている。2回このノードを通れば2回Finished実行ピンが呼ばれる。

結局のところ、自分が「2回目にPlayAnimationWithFinishedEventノードを通ると先に流していた方のFinished実行ピンは無効化される」と勘違いしていたのが悪かったという話。

ついでに、PlayAnimationWithFinishedEventノードを使うとFinished実行ピンにつないだ処理を後から無効にできないということは頭に入れておきたい。

一度アニメーションを再生したらそのまま最後まで走らせる場合はPlayAnimationWithFinishedノードを使って何ら問題なさそう。もしこのノードを使った後に、アニメーションを一時停止したり複数回再生する可能性があるならFinished実行ピンが呼び出されるタイミングを意識したほうが良い。なんなら別の方法でアニメーションの再生を行ったほうがうっかりミスを防げるかも。