はじめに
DOTweenについて。
Tween中に新たなTweenが実行されると、上書きされてしまうようです。
一連の動作を思いどおりに実行させるためには、
キャンセル時の処理も想定する必要がありそうです。
キャンセル処理DOComplete
想定外の動きをしてしまうプロジェクトを作ってみました。
画面上のボタンを押すと、
DOTweenによる実装でキャラクターが横方向に一定量移動します。
こちらは一回当たりの移動を1秒で完結するような実装にしていますが、
1秒を経過する前に再度ボタンを押した場合はこのような動きをします。
2回目にボタンを押した時点から、一定量の移動を行っており、
移動総量が異なっていることがわかります。
ゲームの仕様によっては、このような挙動で問題がない場合もありますが、
2回目のボタンを押した時点で1回目の動作を完結させ、
移動総量が変化しないような動きを実装したいこともあります。
DOComplete()を実行すると、
現在実行中のTweenが、endValueの値まで瞬時に変化します。
今回の例で実装した場合はこちら。
1秒が経過する前に2回目のボタンを押していますが、
その瞬間にもともと移動予定であった場所までワープし、
その地点から再度移動を開始しています。
これにより、移動の総量は変わっていません。
なお、実行中のTweenはDOTween.IsTweening(引数)で、
引数のTweenが実行されているかのboolが取得できます。
補足
似たような中断処理で、DOKill()がありますが、
こちらは値がendValueまで変化せず、中断時の値に留まるようです。
ただし、引数をtrueにすることで、DOComplete()とほぼ同じ挙動になるよう。
微細な違いなど、細かいことはこちらの記事が参考になりました。