前回の記事。
確かに前回の記事通りでも可能なのですが、
DOTWEEN を使えば使うほど、その数だけ Kill 管理をしなければならない…!
嫌になってきたので、DOTWEEN自体になにか方法がないか探したところ、ありました☺
Tween tw; void OnDestroy() { // Destroy 前に Tween を Kill if (tw != null) { tw.Kill(false); tw = null; } } public void ExecAnimation() { // ExecAnimation が複数回呼ばれると前の Tween を追えなくなるので、ここで一旦 Kill if (tw != null) { tw.Kill(false); tw = null; } tw = DOTween.To( () => gameObject.transform.position, v => { transform.position = v; }, new Vector3(0, 0, 1), 0.5f ) .SetRelative() .SetEase(Ease.OutCubic) .OnComplete( () => tw = null ); }
↓
public void ExecAnimation() { DOTween.To( () => gameObject.transform.position, v => { transform.position = v; }, new Vector3(0, 0, 1), 0.5f ) .SetRelative() .SetEase(Ease.OutCubic) .SetLink(gameObject); }
SetLink で指定した gameObject とライフタイムを共にするようになり、gameObject が Destroy されると同時に、Tween も解放されるようになります。便利。
public void ExecAnimation() { transform.DOScaleX(0f, 1f).SetLink(gameObject); }
よく使われるこんな形でも、最後に SetLink を足してあげます。