Chapter 18無料公開

🔰Sequence - トゥイーンのグループ化

オオバ@ohbashunsuke
オオバ@ohbashunsuke
2022.06.06に更新

今までは単品のトゥイーンを扱ってきましたが、本チャプターでは複数のトゥイーンをまとめて処理していきます。

順番に実行する複数のトゥイーン

Sequence

  1. 右に移動
  2. 上に移動
  3. 左に移動
  4. 拡大する

複数のトゥイーンを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の挿入や割り込み処理をしてくれます。


トゥイーンのグループ化はよく使うテクニックなので覚えておくと良いでしょう。次のチャプターでは表現にまつわるトゥイーンに戻ります。パンチと呼ばれる振動を表現について学びます。