問題
DOTween のシーケンスは非常に便利だが、そのままだと作った瞬間に実行しはじめ、挙句の果てには自分をKillしてしまう。
これだと使いまわせない。
結論
これ足せ。
.Pause()
.SetAutoKill(false)
.SetLink(gameObject);
実行時はこれ。
sequence.Restart();
関数にすると便利だね。
using DG.Tweening;
using UnityEngine;
public static class Utilities {
public static Sequence CreateReusableSequence(GameObject linkTarget) {
return DOTween.Sequence()
.Pause()
.SetAutoKill(false)
.SetLink(linkTarget);
}
}
サンプル
using DG.Tweening;
using UnityEngine;
public class Ahan : MonoBehaviour {
private Sequence sequence;
private void Start() {
sequence = DOTween.Sequence()
// 好きなようにTweenする
.Append(transform.DOScaleX(1f, .0f))
.Append(transform.DOScaleX(0f, .1f))
// ここからが大事
.Pause()
.SetAutoKill(false)
.SetLink(gameObject);
}
private void Update() {
if (Input.GetButtonDown("Fire1")) {
sequence.Restart();
}
if (Input.GetButtonDown("Fire2")) {
sequence.Restart();
}
}
}
説明
コメントの通り以下の三行が、シーケンスを再利用可能なものにしている。
.Pause()
.SetAutoKill(false)
.SetLink(gameObject);
一行ずつ見ていこう。
.Pause()
シーケンスは作られたらすぐに実行しようとするせっかちな男だ。
止めよう。
.SetAutoKill(false)
シーケンスは一度実行されるとすぐに自殺しようとするメンヘラだ。
刃物は取り上げておこう。
.SetLink(gameObject);
シーケンスはゲームオブジェクトがDestroyされても生き続ける孤独な不老者だ。
一緒に死ぬ相手を紹介してあげよう。
これで君もニッコリ
やったね!