前回の記事。
確かに前回の記事通りでも可能なのですが、
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 を足してあげます。




