こんにちは、Unityエンジニアのオオバです。
DOTween.Toを使えばどんな値でもトゥイーンできる
DOTweenの拡張メソッド(DOMoveやDOFadeなど)はとても便利ですが、対応しているのは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つのシンプルな構成になっています。
| 引数 | 内容 | 例 |
|---|---|---|
| 第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に代入されていきます。
数値カウントアップ表示の実装例
カスタムプロパティの活用例として、テキストの数値をアニメーション表示させるパターンを紹介します。
スコア表示やダメージ数値の演出でよく使う手法です。
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型のアニメーションで、トゥイーン中にランダムな文字列が表示される仕様です。
数字を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型だけでなく、複数の型に対応しています。
| 型 | 用途 |
|---|---|
float | HP、タイマー、Shaderパラメータなど |
int | スコア、カウント表示など |
Vector2 | 2Dの座標、UVオフセットなど |
Vector3 | 3Dの座標、スケールなど |
Vector4 | Shaderの4成分パラメータなど |
Color | 色のトゥイーン |
string | 文字列のアニメーション |
int型を使えば先ほどのカウントアップ表示のように整数値をトゥイーンできます。
Vector3型を使えば拡張メソッドが存在しないコンポーネントの座標もトゥイーン可能です。
DOTween.Toを使うときの注意点
DOTween.Toはローカル変数をキャプチャするため、変数のスコープに注意が必要です。
メソッド内のローカル変数をトゥイーンさせる場合、そのメソッドの実行が終わっても変数はラムダ式にキャプチャされて生き続けます。意図しないメモリの保持が起きないよう、長時間のトゥイーンではフィールド変数を使うほうが安全です。
また、トゥイーン対象のオブジェクトが破棄された場合にNullReferenceExceptionが発生する可能性があります。
シーン遷移時やオブジェクト破棄時は、DOTween.KillやSetLinkでトゥイーンのライフサイクルを管理しましょう。
// 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の教科書を読んでみてください。

筆者のXをフォローしよう
Unityオブジェクトの描画順の制御って難しいですよね。
この度、Unityの描画順を体系的に学べる「Unity描画順の教科書」を執筆しました。
Unityの描画順を基礎から学びたい方はぜひ確認してみてください!
→ Unity描画順の教科書
最後まで読んでいただきありがとうございました!
すばらしいUnityライフをお過ごしください。
- Unity6000.1.17f1













