UnityのDoTweenの各ループで値を変える
Unityの DOTween プラグインでランダムな動きの繰り返しを作成するメモ。
普通の Loop
DOTween は便利なプラグインで、 Animator やコルーチンよりも少ない手間でオブジェクトの位置や回転、色といった値の変化を作成することができる。
また DOTween には特定の動きを繰り返す Loop 機能もあり、例として上下移動を繰り返すコード:
void Test1() {
transform.DOMoveY(5f, 1f)
.SetEase(Ease.Linear)
.SetLoops(-1, LoopType.Yoyo);
}
これを使いつつ、キューブを右に動かしながら Trail Renderer で軌跡を描くとこんな感じ:
Loop に Random を入れると…
ここで、 Loop ごとに縦の移動距離を変えたくなった。試しにこんなコードを書くと…
void Test2() {
transform.DOMoveY(Random.Range(1f, 8f), 1f)
.SetEase(Ease.Linear)
.SetLoops(-1, LoopType.Yoyo);
}
実行するたびに値は変わるけど 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);
}
また、ループごとにクラス変数などから値を取れば、徐々に変化させるようなこともできる。
規則的な動きを作成したいときはこの方法も良いかもしれない!