パープルハット

※当サイトではGoogleアドセンス広告を利用しています

Unity DOTween.To



DOTween.Toとは?

変数を指定した時間にわたって徐々に変化させる関数です。これにより、

  • HPバーの作成
  • 画面を徐々に暗くする

などができるので便利です。

参考

本記事はこちらのDOTweenの公式ドキュメントを参考にして作成しました。
dotween.demigiant.com




使い方(引数など)

スクリプトで使用する際は以下の様に記述します。

DOTween.To(() => ini, (x) => a = x, end, t);


引数などについての説明をこちらに示します。
第2引数のラムダ式における引数は自由ですが、xとして説明をしています

引数番号 機能
1 xの初期値をラムダ式により取得
()=>iniとすれば、xの初期値はiniとなります。
2 変化させたい変数を指定
(x)=>a = xとしているので、aにはxが代入されます。
3 xの最終値
xはendまで変化します。
4 変化にかかる時間を秒単位で設定
tとすればt秒かけて値を変化させる。


注意点など

  • 第2引数のxはini~endまでt秒かけて変化します。
  • ini~endまで変化するのはaではなく、xという点に注意しましょう
  • aはxに格納された値を逐一代入することで変化しています。





サンプルコード

①指定した変数(a)を指定した値まで変化させる。

  • 最も多いであろうパターン。
  • 以下のコードではaの初期値は変化させないので、ini=aである点に注意


ソースコード

using UnityEngine;
using DG.Tweening;

public class Sample1 : MonoBehaviour
{
    [SerializeField] float a = 0;

    private void Update()
    {
        //キーボードの「A」を押したら開始
        if (Input.GetKeyDown(KeyCode.A))
        {
            //5秒かけてaを100まで変化させる
            DOTween.To(() => a, (x) => a = x, 100, 5);
        }
    }
}


実行結果

キーボードのAを押したら5~100まで増やす




y=x^2 でxを変化させたときのyの値

  • y=x^21 \leq x \leq 3の範囲で5秒かけて変化させたときのyの値を見ていきます。
  • このパターンは少ないですが、To関数における第2引数の記述の仕方の理解に最適です。


ソースコード

using UnityEngine;
using DG.Tweening;

public class Sample2 : MonoBehaviour
{
    [SerializeField] float y;

    private void Update()
    {
        //キーボードの「A」を押したら開始
        if (Input.GetKeyDown(KeyCode.A))
        {
            float xIni = 1, xEnd = 10, t = 5;

            //5秒かけてxを1~10まで変化させ、y=x^2を更新
            DOTween.To(() => xIni, (x) => y = x * x, xEnd, t);
        }
    }
}


実行結果

キーボードのAを押したらy=x^2(1<=x<=10)


③コルーチンでの利用

  • コルーチンなどと併用して「To関数を実行した後に別の関数を実行する」といったことが可能です。
  • HPバーを減らした後にテキストを表示するなど、かなり応用が利きます。
yield return DOTween.To(~).WaitForCompletion();

とすることでTo関数の処理が終了するまで待機できます。

ソースコード(aの変化が終了したらbを変化させる)

using System.Collections;
using UnityEngine;
using DG.Tweening;

public class Sample3 : MonoBehaviour
{
    [SerializeField] float a, b;

    private void Update()
    {
        //キーボードの「A」を押したら開始
        if (Input.GetKeyDown(KeyCode.A))
        {
            StartCoroutine(Cor());
        }
    }

    IEnumerator Cor()
    {
        //aを1から10まで3秒かけて変化させる
        yield return DOTween.To(() => 0.0f, (x) => a = x, 10.0f, 3).WaitForCompletion();

        //bを4から1まで2秒かけて変化させる
        yield return DOTween.To(() => 4.0f, (x) => b = x, 1.0f, 2).WaitForCompletion();

        //aに適当な値を代入
        a = -2;
    }
}


実行結果

キーボードのAを押したら変数Aを変化させ、その後Bを変化させる




応用例

応用すればHPバーを作れたりもします。
こちらの記事で作成しているので参考にしてください。
kiironomidori.hatenablog.com