DOTweenはUnityで使われるアニメーションライブラリで、簡単に強力なアニメーションやエフェクトを作成できます。Tween(アニメーションの補間)の概念を基に、スムーズにオブジェクトの移動、スケーリング、回転、色変更などが行えます。DOTweenは、シンプルなコードで複雑なアニメーションを実現できるため、Unityでアニメーションを制御する上で非常に便利です。
ここでは、DOTweenの基本的な使い方から、TransformアニメーションやUIアニメーション、DOPath、Sequence、イベント、オプションなど、詳細に解説していきます。
まず、DOTweenを使用するためには、パッケージをインポートする必要があります。UnityのPackage ManagerまたはDOTweenの公式サイトからインポート可能です。
Unity Package Managerからインポート
Package Managerで DOTween と検索してインポート。
初期化
最初に一度だけDOTween.Init()を呼び出して初期化します(スクリプトで自動的に初期化されることも多いです)。
DOTweenを使えば、Transformのアニメーション(移動、回転、スケーリングなど)を簡単に作成できます。
using UnityEngine;
using DG.Tweening;
public class TransformAnimation : MonoBehaviour
{
void Start()
{
// 3秒間でオブジェクトを(3, 2, 0)に移動させる
transform.DOMove(new Vector3(3, 2, 0), 3f);
}
}
void Start()
{
// 2秒間でオブジェクトをY軸に90度回転させる
transform.DORotate(new Vector3(0, 90, 0), 2f);
}
void Start()
{
// 1秒間でオブジェクトを2倍のサイズにスケーリング
transform.DOScale(new Vector3(2, 2, 2), 1f);
}
DOTweenは、UnityEngine.UIクラスに対してもアニメーションを適用することができます。ボタンやイメージの色変更、フェードイン・フェードアウトなども簡単に行えます。
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
public class UIColorAnimation : MonoBehaviour
{
public Image image;
void Start()
{
// 2秒間でImageコンポーネントの色を赤に変更
image.DOColor(Color.red, 2f);
}
}
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
public class UIFadeAnimation : MonoBehaviour
{
public Image image;
void Start()
{
// 1秒間でImageのアルファを0(透明)にフェードアウト
image.DOFade(0, 1f);
}
}
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
public class UITextAnimation : MonoBehaviour
{
public Text text;
void Start()
{
// 3秒間でテキストの色を青に変更
text.DOColor(Color.blue, 3f);
}
}
DOPathを使うと、オブジェクトを指定したパスに沿って移動させることができます。これにより、複雑な移動パターンを簡単に実装できます。
void Start()
{
// パスを定義(4つのポイントを通る)
Vector3[] path = { new Vector3(0, 0, 0), new Vector3(1, 2, 0), new Vector3(3, 2, 0), new Vector3(4, 0, 0) };
// 5秒間でオブジェクトをパスに沿って移動させる
transform.DOPath(path, 5f, PathType.CatmullRom);
}
Sequenceを使用すると、複数のアニメーションを連続して実行することができます。Appendを使って順番にアニメーションを追加していきます。
void Start()
{
// Sequenceを作成
Sequence sequence = DOTween.Sequence();
// 2秒間でオブジェクトを移動 → 1秒間でスケールアップ → 3秒間で回転
sequence.Append(transform.DOMove(new Vector3(2, 2, 0), 2f));
sequence.Append(transform.DOScale(new Vector3(2, 2, 2), 1f));
sequence.Append(transform.DORotate(new Vector3(0, 180, 0), 3f));
}
アニメーションの開始、完了、中断などのタイミングで、特定のイベントをトリガーすることができます。
void Start()
{
transform.DOMove(new Vector3(3, 3, 0), 2f).OnComplete(() =>
{
Debug.Log("アニメーション完了");
});
}
void Start()
{
transform.DOScale(new Vector3(2, 2, 2), 1f).OnStart(() =>
{
Debug.Log("アニメーション開始");
});
}
DOTweenには、アニメーションをさらに細かく制御するためのさまざまなオプションがあります。たとえば、ループ、イージング(緩急の設定)、リピートなどです。
void Start()
{
// 無限ループでオブジェクトを上下に移動させる
transform.DOMoveY(3f, 2f).SetLoops(-1, LoopType.Yoyo);
}
void Start()
{
// 緩急をつけた移動アニメーション(イージング:InOutQuad)
transform.DOMove(new Vector3(3, 3, 0), 2f).SetEase(Ease.InOutQuad);
}
DOShake
オブジェクトを揺らすアニメーションが可能です。たとえば、カメラの揺れなどに使用されます。
transform.DOShakePosition(2f, new Vector3(1, 1, 0));
DOLocalMove
ローカル座標系に基づいてオブジェクトを移動させる場合はDOLocalMoveを使います。
transform.DOLocalMove(new Vector3(0, 3, 0), 2f);
Kill
アニメーションを途中で停止させることも可能です。
transform.DOKill();
DOTweenは、少ないコードで簡単に強力なアニメーションを作成できるツールです。TransformやUIのアニメーション、パスアニメーション、シーケンスなど、幅広い用途に対応しており、柔軟な制御が可能です。イベントやオプションを使うことで、より洗練されたアニメーションを作り上げることができます。