環境
- 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.上記のソースを実行する
- 2-1.Tween途中でKill(false)する
- 2-2.Tween途中でKill(true)する
- 3-1.Tween途中でComplete(false)する
- 3-2Tween途中でComplete(true)する
- 4-1Tween途中でPause()する
- 4-2.Tween途中でPause()後、Play()する
- 4-3.Tween途中でPause後、Restart()する
- 4-4.Tween途中でPause後、Restart()する
- 5-1.3回ループ設定してTween
- 5-2.負の数でループ設定してTween
- 5-3.負の数でループ設定したTween中にKill(true or false)
- 5-4.負の数でループ設定したTween中にComplete()したら
- まとめ
- あわせてDOTweenの記事をどうぞ
1.上記のソースを実行する
- OnStart
- OnPlay
- OnUpdate...
- OnStepComplete
- OnComplete
- OnKill
※...
・・・これは何度も実行されるという意味
大抵のTweenはこの順でコールバックされます。
2-1.Tween途中でKill(false)する
- OnStart
- OnPlay
- OnUpdate...
- OnKill
2-2.Tween途中でKill(true)する
- OnStart
- OnPlay
- OnUpdate...
- OnComplete
- OnKill
3-1.Tween途中でComplete(false)する
- OnStart
- OnPlay
- OnUpdate...
- OnComplete
- OnKill
3-2Tween途中でComplete(true)する
- OnStart
- OnPlay
- OnUpdate...
- OnStepComplete
- OnComplete
- OnKill
4-1Tween途中でPause()する
- OnStart
- OnPlay
- OnUpdate...
- OnPause
4-2.Tween途中でPause()後、Play()する
- OnStart
- OnPlay
- OnUpdate...
- OnPause
- OnPlay
- OnUpdate...
4-3.Tween途中でPause後、Restart()する
- OnStart
- OnPlay
- OnUpdate...
- OnRewind
- OnPause
- OnUpdate...
4-4.Tween途中でPause後、Restart()する
- OnStart
- OnPlay
- OnUpdate...
- OnPause
- OnUpdate ※1度しか呼ばれません
- OnRewind
- OnPlay
- OnUpdate...
Pause後に1度だけOnUpdateが呼ばれる謎仕様。
そもそもなぜOnUpdateが呼ばれるのか。この辺はソースを辿っていこうと思います。今は過酷な現実を受け入れることにしましょう。
5-1.3回ループ設定してTween
- OnStart
- OnPlay
- OnUpdate...
- OnStepComplete
- OnUpdate...
- OnStepComplete
- OnUpdate...
- OnStepComplete
- OnComplete
- OnKill
5-2.負の数でループ設定してTween
- OnStart
- OnPlay
- OnUpdate...
- OnStepComplete
- OnUpdate...
- OnStepComplete
- OnUpdate...
5-3.負の数でループ設定したTween中にKill(true or false)
- OnStart
- OnPlay
- OnUpdate...
- OnStepComplete
- OnUpdate...
- OnStepComplete
- OnUpdate...
- OnKill
5-4.負の数でループ設定したTween中にComplete()したら
- OnStart
- OnPlay
- OnUpdate...
- OnStepComplete
- OnUpdate...
- OnStepComplete
- OnUpdate...
※Tweenは止まりません
まとめ
- OnStart, OnComplete, OnKillはTween通して一度しか呼ばれる
- OnUpdate, OnPlay, OnRewind, OnStepComplete, OnPauseは何度でも呼ばれる
- Tweenが終了するときは必ずOnKillが呼ばれる
- Tween開始は必ずOnStartが呼ばれる
まとめるとこんな感じでしょうか。
4-4.Tween途中でPause後、Restart()する
以外は、一度理解すれば覚えられそうな実行順でした。
これでコールバックの順番で迷うことは無いですね!!