今までは単品のトゥイーンを扱ってきましたが、本チャプターでは複数のトゥイーンをまとめて処理していきます。
順番に実行する複数のトゥイーン
- 右に移動
- 上に移動
- 左に移動
- 拡大する
複数のトゥイーンを1つの演出として実装するときはSequenceを検討します。
😱Sequenceを使わず愚直に書いてみる
transform.DOLocalMoveX(10f, 1f);
transform.DOLocalMoveY(1f, 1f).SetDelay(1f);
transform.DOLocalMoveX(5, 1f).SetDelay(2f);
transform.DOScale(3.5f, 0.3f).SetDelay(3f);
このようにSetDelay
を使ってトゥイーン開始タイミングをずらすことで実装可能です。しかしタイミングを調整したくなった時に遅延時間(SetDelay
)もすべて調整する必要が出てきます。
ゲーム開発中のタイミング調整は日常的に発生するため結構なコストになることがあります。そこでSequenceを使ってみましょう
😀Sequenceを使用する
DOTween.Sequence()
.Append(transform.DOLocalMoveX(10f, 1f))
.Append(transform.DOLocalMoveY(1f, 1f))
.Append(transform.DOLocalMoveX(5f, 1f))
.Append(transform.DOScale(3.5f, 0.3f));
SequenceクラスのAppendメソッドを使うとトゥイーンを順番に実行できます。
ソースコードからSetDelayが無くなりました。これはタイミングの調整をする際に遅延時間を意識する必要がなくなったということです。
もしこれを後から見た人はどう思うでしょうか。Sequenceで記述したコードの方が理解しやすいですよね?
👉Sequenceを使う利点
複数のトゥイーンを1つのトゥイーンとして扱えることが大きなメリットです。
停止
Goto
Restart
とくに停止処理を一括で行えるのがとても便利です。演出を作るときは複数のトゥイーンが組み合わさります。
スキップ処理を実装する時に、それら1つ1つのトゥイーンにKill
メソッドを実行するのは手間ですしミスの元。
Sequence
にまとめていれば、SequenceをKillするだけなのでとてもシンプルです。
[SerializeField] Transform _tr0;
[SerializeField] Transform _tr1;
IEnumerator Start()
{
var seq = DOTween.Sequence();
seq.Append(_tr0.DOLocalMove(new Vector3(10f, 0, 0), 1.5f));
seq.Append(_tr1.DOLocalMove(new Vector3(0f, 2f, 0), 1f));
yield return new WaitForSeconds(2f);
// 複数のトゥイーンを一括でKill
seq.Kill();
}
Sequence
を使わずとも複数のトゥイーンを一括でKill
することは可能です。
SequenceにはAppend以外に3種類のメソッドが用意されています。Insert
、Join
、Prepend
これらはAppendと違ってTweenの挿入や割り込み処理をしてくれます。
トゥイーンのグループ化はよく使うテクニックなので覚えておくと良いでしょう。次のチャプターでは表現にまつわるトゥイーンに戻ります。パンチと呼ばれる振動を表現について学びます。