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

渋谷ほととぎす通信

主にUnityの事で自分が説明できないところを説明できるようにするための個人ブログ

DOTweenのコールバック関数の実行順

Unityアセットストア Unity

f:id:esakun:20150825162207p:plain

環境

  • Unity5.4.2f1
  • DOTween v1.1.310

DOTweenには実行タイミングや状態に応じたコールバック関数をセットすることが出来ます。 今回検証に使うコードはこちら。

var tween = transform.DOLocalMoveX (2f, 1f)
    .OnStart (() => Debug.Log ("OnStart"))
    .OnPlay (() => Debug.Log ("OnPlay"))
    .OnKill (() => Debug.Log ("OnKill"))
    .OnComplete (() => Debug.Log ("OnComplete"))
    .OnPause (() => Debug.Log ("OnPause"))
    .OnRewind (() => Debug.Log ("OnRewind"))
    .OnStepComplete (() => Debug.Log ("OnStepComplete"))
    .OnUpdate (() => Debug.LogWarning ("OnUpdate"))
    .OnWaypointChange (x => Debug.Log ("OnWaypointChange" + x));

様々なケースが存在するので、一つ一つ実行順を確認していきます。

1.上記のソースを実行する

  1. OnStart
  2. OnPlay
  3. OnUpdate...
  4. OnStepComplete
  5. OnComplete
  6. OnKill

...・・・これは何度も実行されるという意味

大抵のTweenはこの順でコールバックされます。

2-1.Tween途中でKill(false)する

  1. OnStart
  2. OnPlay
  3. OnUpdate...
  4. OnKill

2-2.Tween途中でKill(true)する

  1. OnStart
  2. OnPlay
  3. OnUpdate...
  4. OnComplete
  5. OnKill

3-1.Tween途中でComplete(false)する

  1. OnStart
  2. OnPlay
  3. OnUpdate...
  4. OnComplete
  5. OnKill

3-2Tween途中でComplete(true)する

  1. OnStart
  2. OnPlay
  3. OnUpdate...
  4. OnStepComplete
  5. OnComplete
  6. OnKill

4-1Tween途中でPause()する

  1. OnStart
  2. OnPlay
  3. OnUpdate...
  4. OnPause

4-2.Tween途中でPause()後、Play()する

  1. OnStart
  2. OnPlay
  3. OnUpdate...
  4. OnPause
  5. OnPlay
  6. OnUpdate...

4-3.Tween途中でPause後、Restart()する

  1. OnStart
  2. OnPlay
  3. OnUpdate...
  4. OnRewind
  5. OnPause
  6. OnUpdate...

4-4.Tween途中でPause後、Restart()する

  1. OnStart
  2. OnPlay
  3. OnUpdate...
  4. OnPause
  5. OnUpdate ※1度しか呼ばれません
  6. OnRewind
  7. OnPlay
  8. OnUpdate...

Pause後に1度だけOnUpdateが呼ばれる謎仕様。
そもそもなぜOnUpdateが呼ばれるのか。この辺はソースを辿っていこうと思います。今は過酷な現実を受け入れることにしましょう。

5-1.3回ループ設定してTween

  1. OnStart
  2. OnPlay
  3. OnUpdate...
  4. OnStepComplete
  5. OnUpdate...
  6. OnStepComplete
  7. OnUpdate...
  8. OnStepComplete
  9. OnComplete
  10. OnKill

5-2.負の数でループ設定してTween

  1. OnStart
  2. OnPlay
  3. OnUpdate...
  4. OnStepComplete
  5. OnUpdate...
  6. OnStepComplete
  7. OnUpdate...

5-3.負の数でループ設定したTween中にKill(true or false)

  1. OnStart
  2. OnPlay
  3. OnUpdate...
  4. OnStepComplete
  5. OnUpdate...
  6. OnStepComplete
  7. OnUpdate...
  8. OnKill

5-4.負の数でループ設定したTween中にComplete()したら

  1. OnStart
  2. OnPlay
  3. OnUpdate...
  4. OnStepComplete
  5. OnUpdate...
  6. OnStepComplete
  7. OnUpdate...

※Tweenは止まりません

まとめ

  • OnStart, OnComplete, OnKillはTween通して一度しか呼ばれる
  • OnUpdate, OnPlay, OnRewind, OnStepComplete, OnPauseは何度でも呼ばれる
  • Tweenが終了するときは必ずOnKillが呼ばれる
  • Tween開始は必ずOnStartが呼ばれる

まとめるとこんな感じでしょうか。

4-4.Tween途中でPause後、Restart()する 以外は、一度理解すれば覚えられそうな実行順でした。
これでコールバックの順番で迷うことは無いですね!!

あわせてDOTweenの記事をどうぞ

www.shibuya24.info

www.shibuya24.info

www.shibuya24.info