UnityのDoTweenの各ループで値を変える

UnityのDoTweenの各ループで値を変える

Unityの DOTween プラグインでランダムな動きの繰り返しを作成するメモ。

普通の Loop

DOTween は便利なプラグインで、 Animator やコルーチンよりも少ない手間でオブジェクトの位置や回転、色といった値の変化を作成することができる。

また DOTween には特定の動きを繰り返す Loop 機能もあり、例として上下移動を繰り返すコード:

void Test1() {
    transform.DOMoveY(5f, 1f)
        .SetEase(Ease.Linear)
        .SetLoops(-1, LoopType.Yoyo);
}

これを使いつつ、キューブを右に動かしながら Trail Renderer で軌跡を描くとこんな感じ:

img

Loop に Random を入れると…

ここで、 Loop ごとに縦の移動距離を変えたくなった。試しにこんなコードを書くと…

void Test2() {
    transform.DOMoveY(Random.Range(1f, 8f), 1f)
        .SetEase(Ease.Linear)
        .SetLoops(-1, LoopType.Yoyo);
}

img img img

実行するたびに値は変わるけど Loop ごとには変わらない…

Loop ごとに値を変化させる

結論から言うと、 DOTween の Loop は「その動きを繰り返す」 Tween なので、 Loop のたびに動きを変えることはできないみたい。

なので Loop ごとに動きを変えるには、無限ループではなく OnComplete で関数を呼び直し続けるのが良さそう。

void Test3() {
    LoopFunc();
}

void LoopFunc() {
    transform.DOMoveY(Random.Range(1f, 8f), 1f)
        .SetEase(Ease.Linear)
        .SetLoops(2, LoopType.Yoyo)
        .OnComplete(LoopFunc);
}

img

また、ループごとにクラス変数などから値を取れば、徐々に変化させるようなこともできる。

img

規則的な動きを作成したいときはこの方法も良いかもしれない!