こんにちわ、DOTween大好きオオバです。

みんな大好きDOTween。オオバも毎日使ってます。

長らく使っていると落とし穴にもハマることもありまして、、、

こちらのコードは一見普通のループアニメーションのDOTweenです。

var tween = transform.DOLocalMoveX(1f, 2f)  
    .SetEase(Ease.Linear)  
    .SetLoops(-1, LoopType.Yoyo)  
    .OnComplete(()=>Debug.Log(“Complete”));  

これだけは知っておいて方がいいDOTweenのループの落とし穴_0

今いる座標と x : 1 の間を2秒かけた平行移動をループし続けます。
※SetLoopsの第1引数に -1 を代入すると永久に繰り返されます

今回は 永久ループ (SetLoops第1引数に「-1」をセットした場合) に起こる罠について紹介します。

この記事の内容

3種類のTween停止方法

永久ループ設定していないTweenの停止方法のおさらいします。

自然停止

言わずもがななので割愛。

Pauseメソッド & TogglePauseメソッド

tween.Pause(); // or  tween.TogglePause();  

その名の通り 一時停止 です。一時停止ということは、Playメソッド or TogglePauseメソッド で、ポーズしたその状態から再開することはが出来ます。もう1つ Restartメソッド もありまして、こちらはTweenの最初から再度実行したいときに使用します。

Killメソッド

tween.Kill();  

Pauseメソッドと異なり、再度そのTweenを実行出来ません。
Killを実行したそのタイミングでの状態 で停止します。
無引数で実行すると OnComplete が呼ばれませんが、 true を代入するとOnCompleteが実行されてTweenは停止します。

Completeメソッド

tween.Complete();  

こちらもKillと同様再度そのTweenを実行出来ない状態で停止しますが、Killとの違いは、Tweenのゴール地点まで一気にジャンプ します。冒頭の例だとtransform.localPosition.xは1fになります。

永久ループTweenの停止方法

永久ループ設定 (SetLoops第1引数に-1をセット) の場合、停止方法の幾つかは使用できなくなります。
表にして見ました。

停止手段停止可能備考
自然停止不可永久ループなので停止しない
Pause & TogglePause可能-
Kill可能-
Complete不可Complete状態が存在しないため

Pause & TogglePauseまたはKillのみ停止させることが可能です。

まとめ

永久ループ設定した場合のDOTween挙動について紹介してきました。

「SetLoopsを-1にセットしたときは、Completeという概念が無くなる」

ということです。

冒頭のソースコード内 OnComplete 関数はセットしたとしても実行される術が無いため、定義してはいけないということになります。

var tween = transform.DOLocalMoveX(1f, 2f)  
    .SetEase(Ease.Linear)  
    .SetLoops(-1, LoopType.Yoyo)  
    // SetLoops第1引数が-1なので、OnCompleteは実行されません!!  
    .OnComplete(()=>Debug.Log(“Complete”));  

開発中、なぜかOnCompleteが実行されないな、
と疑問に思った方はSetLoopsを今一度確認してみてはいかがでしょうか。

期間限定 最大95%オフセール
効率UPメガバンドル開催中!最大95%オフ!!!
期間 : 11月1日午後15時59分まで
オススメ記事
検証環境