妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

InterpToMovementで正確な回数ループさせるのは難しい

imoue.hatenablog.com

昨日の続き

妹「それで次に困っているのが茂みに出入りする時に、ガサゴソ動いて茂みが揺れる演出があるんだけど」

「あー、揺れてるとこはいまいち動画に写ってないかも。フレームレート落としてあるもんだから」

妹「そうなの!? そこ大事なところなのに! とにかく揺れてるんだよ。でも揺らし方がいまいち納得してないというか、多分出入りするたびに茂みの位置がずれてる」

「どうやって揺らしてるの?」

妹「InterpToMovementを使ってる。左と右に移動して、それを繰り返す。これで揺れ方はいいんだけど、揺らす間Delayで1秒待ってて、ピッタリ1秒なら同じ位置のはずなんだけど、多分ピッタリじゃなくてズレてるだろうなあと」

f:id:una_unagi:20151213223202p:plain

f:id:una_unagi:20151213223840p:plain

「このInterpToMovementの設定だと、仮にピッタリ1秒でもズレるような気もするんだけど、とりあえず現状でズレてるかどうかは、揺れ幅を大きくしてみればわかりやすい。Xを3づつずらすところを300にしてみる」

f:id:una_unagi:20151213224214g:plain

「ということでズレてるね。茂みに入っる時は茂みの中心位置に強制移動されるからわからないけど、出る時はそのままの位置に出るからズレがわかる」

妹「やっぱり他の方法がいいのかなあ」

「その方がいいような気はするけど、一応InterpToMovementでも出来そうな方法はある。まずループ方式をPingPongからOneShotかOneShotReverseに変える。その状態でDelayすれば、多少Delayのタイミングが遅れたとしても次のアニメを開始しないから、ズレは起きない。よりスマートにやるならOnInterpToStopイベントを使う」

妹「でもそれだと一往復しか出来ないじゃん。コントロールポイントで同じの何個も作るのはめんどくさいし」

「そこはコンストラクションスクリプトとかで、ループを使って自動生成すればいい」

妹「OneShotにしちゃうと、もう1回Activeしても動き出さないみたいんだけど」

「そうなんだ……初期化する方法ないかなあ。無かったらもう動かすたびにInterpToMovementコンポーネントを生成して、止まった時にDestoryするしかないんだけど」

妹「やっぱりどう考えてもめんどくさい。もっと楽な方法探す」