Chapter 15無料公開

🔰SetRelative - 相対値を使ったトゥイーン

オオバ@DOTweenの教科書
オオバ@DOTweenの教科書
2021.03.13に更新

今までトゥイーンのゴール座標は絶対値で指定してきました。
(10, 0, 0)と指定すれば、(10, 0, 0)にたどり着くということです。

現在地点から相対値を使う

現在地点から相対値を指定したい場合は、
相対座標を指定するメソッドSetRelativeを使います。

transform.DOLocalMove(new Vector3(-5f, 0, 0), 1f)
    .SetRelative(true);

👆サンプルでは最初 (5, 0, 0)に配置してあるターゲットに対して、
(-5f, 0, 0)に移動するように指定しています。

SetRelative(true) を指定することで相対値として
処理されるようになります。

ターゲットは

(5 0, 0) → (-5, 0, 0) ではなく
(5 0, 0) から (0, 0, 0) へ
移動するようになりました。

相対値指定の使い所

ゲーム開発中には絶対値ではなく相対値を指定したくなる時があります。

敵に攻撃したダメージを表示する実装を例に解説します。

  1. 敵の表示領域内からランダム抽出した座標に表示
  2. 表示したダメージ値が消えていく際に少し上へ移動する

ソースコード
GameObject[] enemys;  // 何かしらの方法でセットする
Text[] damages; // 何かしらの方法でセットする

IEnumerator Start()
{
    for (int i = 0; i < enemys.Length; i++)
    {
        var enemy = enemys[i];
        // 敵の配置
        enemy.rectTransform.anchoredPosition =
            new Vector2((float)i * 300f - 300f, 0);
        // 敵をシェイク
        enemy.rectTransform.DOShakePosition(0.24f, 30f, 30)
            .SetDelay(0.3f).SetRelative(true);
        // 敵が消える
        enemy.DOFade(0, 0.6f).SetDelay(0.74f);
    }

    yield return new WaitForSeconds(0.2f);

    // ダメージ値と敵表示
    for (int i = 0; i < damages.Length; i++)
    {
        var text = damages[i];
        // ダメージ値の配置
        text.rectTransform.anchoredPosition =
            new Vector2((float)i * 300f - 300f, 0);
        // ダメージ値の初期スケールのセット
        text.rectTransform.localScale = Vector3.one * 10f;

        // スケールトゥイーン
        text.rectTransform.DOScale(1f, 0.2f).SetEase(Ease.OutBack);
        // ダメージ値のカウントアップトゥイーン
        text.DOCounter(0, Random.Range(100, 9999), 0.3f);
        // 上に移動トゥイーン
        text.rectTransform.DOAnchorPos(new Vector2(0, 60f), 1f)
            .SetDelay(0.4f)
            .SetEase(Ease.InQuart)
            .SetRelative(true);
        // 消えるトゥイーン
        text.DOFade(0, 1f).SetDelay(0.4f).SetEase(Ease.Linear);
    }
}

この演出を実装する時、ダメージテキストはそれぞれ別の座標に配置されているため、
その後の少し上へ移動させる際に絶対座標を指定しづらいです。

相対値で指定することで読みやすいコードになります。

覚えておきたいSetRelative

  • SetRelative(true)を指定すると相対値として処理される
  • ゲーム開発中に相対値を指定することは開発中よく発生する
  • 絶対座標を取得しづらい時に相対値を指定してコードがスッキリする場合がある

結構使うことが多いSetRelativeを覚えておきましょう。


次のチャプターではUI開発に使うuGUIのトゥイーンについて学んでいきます。