こんにちは、Unityエンジニアのオオバです。

お悩みさん
お悩みさん
  • DOTweenの拡張メソッドにない値をトゥイーンしたい
  • DOTween.Toの書き方がわからない
  • カスタムプロパティって何?
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    DOTween.Toを使えばどんな値でもトゥイーンできる

    DOTweenの拡張メソッド(DOMoveDOFadeなど)はとても便利ですが、対応しているのはUnityの標準コンポーネントだけです。
    自分で定義したプロパティやフィールドをトゥイーンしたい場面は必ず出てきます。

    この記事ではDOTween.Toの使い方から、getter/setterの仕組み、そして実際のゲーム開発で使える活用パターンまで解説します。

    👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

    DOTween.Toの基本的な書き方

    DOTweenで独自の値をトゥイーンさせるには、DOTween.Toメソッドを使います。
    まず「カスタムプロパティ」とは、自分で定義したプロパティのことを指します。

    public class Sample : MonoBehaviour  
    {
        public float Foo { get; set; }  
    }
    

    このFooプロパティを0.5秒かけて0から1にトゥイーンさせるコードがこちらです。

    DOTween.To(() => Foo, (x) => Foo = x, 1f, 0.5f);  
    

    一見変わった書き方に見えますが、DOTween.Toの引数は4つのシンプルな構成になっています。

    DOTween.Toの引数構成
    引数内容
    第1引数getter(現在値の取得)() => Foo
    第2引数setter(値の代入)(x) => Foo = x
    第3引数目標値1f
    第4引数トゥイーン時間(秒)0.5f

    第3・4引数は直感的に理解できます。ポイントは第1・2引数のgetter/setterです。

    第1引数のgetterはラムダ式で「トゥイーンさせるプロパティ」を指定します。() => Fooと書くことで、DOTweenがトゥイーン中に現在値を取得できるようになります。

    第2引数のsetterはトゥイーン中に更新される値をプロパティに代入する処理です。(x) => Foo = xと書くと、0.1秒経過時に0.2、0.2秒経過時に0.4というように、xの値が自動的に更新されFooに代入されていきます。

    ※setterの引数名`x`は任意の変数名が使えます。`value`や`v`など好みの名前でOK

    数値カウントアップ表示の実装例

    カスタムプロパティの活用例として、テキストの数値をアニメーション表示させるパターンを紹介します。
    スコア表示やダメージ数値の演出でよく使う手法です。

    【Unity】DOTween.Toで何でもアニメーション!カスタムプロパティのトゥイーン方法_0

    数値カウントアップの実行結果
    public class CountUpSample : MonoBehaviour  
    {
        [SerializeField] private Text _text;  
        private int _num;  
    
        // Numがカスタムプロパティ  
        public int Num  
        {
            set  
            {
                _num = value;  
                // Numに値が代入されると画面上の文字が更新される  
                _text.text = _num.ToString();  
            }
            get => _num;  
        }
    
        void Start()  
        {
            DOTween.To(() => Num, (n) => Num = n, 100, 2f)  
                   .SetEase(Ease.Linear);  
        }
    }
    

    setterの中で_text.textを更新しているのがポイントです。DOTweenが値を更新するたびにsetterが呼ばれるため、自動的にUIが更新されます。

    DOTweenには文字列をアニメーションさせるDOTextという拡張メソッドもあります。
    ただしDOTextはstring型のアニメーションで、トゥイーン中にランダムな文字列が表示される仕様です。

    【Unity】DOTween.Toで何でもアニメーション!カスタムプロパティのトゥイーン方法_1

    DOTextの実行結果(ランダム文字列が表示される)

    数字を0から100まで順番に表示したい場合はDOTextでは実現できないため、DOTween.Toでカスタムプロパティをトゥイーンさせる方法が最適です。

    実践的な活用パターン

    DOTween.Toはゲーム開発のさまざまな場面で活躍します。代表的なパターンを紹介します。

    HPゲージのスムーズ減少

    HPバーの値を即座に変更するのではなく、じわじわと減少させる演出です。

    [SerializeField] private Slider _hpSlider;  
    private float _displayHp = 100f;  
    
    public void TakeDamage(float damage)  
    {
        float targetHp = _displayHp - damage;  
        DOTween.To(() => _displayHp, (x) => {  
            _displayHp = x;  
            _hpSlider.value = _displayHp / 100f;  
        }, targetHp, 0.5f).SetEase(Ease.OutQuad);  
    }
    

    setterの中でSliderのvalueを更新することで、ダメージを受けた瞬間からゲージがなめらかに減少します。

    カメラのFOV変更

    ズームイン・ズームアウトの演出でカメラのFieldOfViewをトゥイーンさせるパターンです。

    [SerializeField] private Camera _camera;  
    
    public void ZoomIn()  
    {
        DOTween.To(() => _camera.fieldOfView,  
                   (x) => _camera.fieldOfView = x,  
                   30f, 0.3f).SetEase(Ease.InOutSine);  
    }
    

    Camera.fieldOfViewにはDOTweenの拡張メソッドが用意されていないため、DOTween.Toの出番です。

    マテリアルのカスタムプロパティ

    ShaderのカスタムプロパティをC#から操作してアニメーションさせるパターンです。

    [SerializeField] private Material _material;  
    
    void Start()  
    {
        float dissolveValue = 0f;  
        DOTween.To(() => dissolveValue, (x) => {  
            dissolveValue = x;  
            _material.SetFloat("_Dissolve", x);  
        }, 1f, 2f);  
    }
    

    ディゾルブエフェクトやアウトライン幅の変更など、Shaderパラメータのアニメーションに重宝します。

    DOTween.Toで使える型

    DOTween.Toはfloat型だけでなく、複数の型に対応しています。

    DOTween.Toが対応する型
    用途
    floatHP、タイマー、Shaderパラメータなど
    intスコア、カウント表示など
    Vector22Dの座標、UVオフセットなど
    Vector33Dの座標、スケールなど
    Vector4Shaderの4成分パラメータなど
    Color色のトゥイーン
    string文字列のアニメーション

    int型を使えば先ほどのカウントアップ表示のように整数値をトゥイーンできます。
    Vector3型を使えば拡張メソッドが存在しないコンポーネントの座標もトゥイーン可能です。

    DOTween.Toを使うときの注意点

    DOTween.Toはローカル変数をキャプチャするため、変数のスコープに注意が必要です。

    メソッド内のローカル変数をトゥイーンさせる場合、そのメソッドの実行が終わっても変数はラムダ式にキャプチャされて生き続けます。意図しないメモリの保持が起きないよう、長時間のトゥイーンではフィールド変数を使うほうが安全です。

    また、トゥイーン対象のオブジェクトが破棄された場合にNullReferenceExceptionが発生する可能性があります。
    シーン遷移時やオブジェクト破棄時は、DOTween.KillSetLinkでトゥイーンのライフサイクルを管理しましょう。

    // GameObjectの破棄時にトゥイーンも自動停止  
    DOTween.To(() => _value, (x) => _value = x, 100f, 2f)  
           .SetLink(gameObject);  
    

    SetLinkを設定しておけば、GameObjectが破棄されたタイミングでトゥイーンも自動的にKillされます。

    👉 【Unity】DOTweenコールバック内の例外で実機クラッシュする原因と対処法

    まとめ

    DOTween.Toを使えば、拡張メソッドが用意されていないどんな値でもトゥイーンさせることが可能です。

    getter/setterのラムダ式で「何をトゥイーンさせるか」「どう値を反映するか」を指定するだけ。
    setterの中でUI更新やShaderパラメータの反映を行えば、1行のトゥイーンコードでリッチな演出が実現できます。

    カスタムイージングと組み合わせれば、さらに表現の幅が広がります。

    👉 【Unity】DOTweenのSetLookAtを使ってワンランク上の表現を手に入れよう

    もっと詳しくDOTweenのことを知りたい方は、DOTweenの教科書を読んでみてください。

    DOTweenの教科書

    DOTweenの教科書
    【600冊以上販売】Unityのアニメーション用ライブラリのDOTweenを体系的に学べる教科書。11万文字の大ボリュー...
    詳しくはこちら
    DOTweenの教科書

    Unityオブジェクトの描画順の制御って難しいですよね。
    この度、Unityの描画順を体系的に学べる「Unity描画順の教科書」を執筆しました。

    Unityの描画順を基礎から学びたい方はぜひ確認してみてください!
    Unity描画順の教科書

    最後まで読んでいただきありがとうございました!
    すばらしいUnityライフをお過ごしください。

    オススメ記事
    検証環境