読者です 読者をやめる 読者になる 読者になる

渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きく慣れるように。。。 ※所属団体とは一切関係がありません

今一番個人的にアツいUnityのTweenエンジン『DOTween』の罠〜ループ編〜


f:id:esakun:20150825162207p:plain

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

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

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

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

f:id:esakun:20161008134702g:plain

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

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

◆3種類のTween停止方法

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

  • 自然停止(SetLoopsに0未満の整数が代入されていない場合)
  • Pauseメソッド & TogglePauseメソッド
  • Killメソッド
  • Completeメソッド

◇自然停止

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

◇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.x1fになります。

◆永久ループTweenの停止方法

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

  • 自然停止(SetLoopsに0未満の整数が代入されていない場合)
  • Pauseメソッド & TogglePauseメソッド
  • Killメソッド
  • Completeメソッド

◇自然停止

☓不可
永久ループするため自然停止しません。

◇Pauseメソッド & TogglePauseメソッド

○可能

◇Killメソッド

○可能
※引数にtrueを代入してもOnCompleteは実行さないことに注意!!

◇Completeメソッド

☓不可
なぜなら、Complete状態(Tweenが終了した状態)というものが永久ループの場合存在しないからです。

まとめ

永久ループ設定した場合の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を今一度確認してみたはいかがでしょうか。


※今や個人的にDOTweenにアツイわけではないですが、他とタイトルを合わせています。

◆関連記事

esakun.hateblo.jp

esakun.hateblo.jp