dotween
dotween copied to clipboard
OnComplete callback called twice when triggered from OnUpdate
Hey, I use the code below to allow users skip animations.
var tw = transform.DOLocalMove(new Vector3(), 10);
tw.OnStart(() => Debug.Log("Started"));
tw.OnComplete(() => Debug.Log("Completed"));
tw.OnUpdate(() => {
if (Input.GetMouseButtonDown(0))
tw.Complete(true);
}
);
This causes OnComplete to trigger twice in v1.2.632
The following code also fires OnComplete twice, it's also fired from OnUpdate but using Kill(true) instead....
public void dotest()
{
Sequence sequence = DOTween.Sequence();
int updatecount = 0;
int completecalls = 0;
int onkillcount = 0;
int endFrame = Time.frameCount + 1;
sequence.AppendInterval(2)
.OnUpdate(() => {
++updatecount;
Debug.Log($"called OnUpdate {updatecount}");
sequence.Kill(complete: true);
})
.OnComplete(() => {
++completecalls;
Debug.Log($"complete called {completecalls} update called {updatecount}");
})
.OnKill(() => {
onkillcount++;
Debug.Log($"called OnKill {onkillcount}");
})
.SetUpdate(UpdateType.Normal, isIndependentUpdate: true)
.SetAutoKill(true);
sequence.Play();
}
Here is some simpler code:
_sequence = DOTween.Sequence();
_sequence.AppendInterval(2f)
.OnUpdate(() => _sequence.Kill(true))
.OnComplete(() => Debug.Log($"COMPLETE {_sequence.IsActive()}"));
Output:
COMPLETE true
COMPLETE false
sequence.Kill(true) triggers the first OnComplete with the sequence still active. Now completed, the second OnComplete runs naturally, but with an inactive sequence.