アマゾンバナーリンク

ディスプレイ広告

スポンサーリンク

【Unity】DOTweenの使い方

こんにちは!ジェイです。みなさんはUnityを使う時にDOTweenというアセットを知っていますか?DOTweenは様々な動きを簡単に記述できて、チェーン状につないで行くことで、複雑な動きを簡単に表現することができる便利なアセットです。

目次

記事内広告

ダウンロードと準備

上記のURLにアクセスしてアセットストアからDOTweenをダウンロードしてインポートします。
すると以下の画像が現れるので、Open DOTween Utility Panelをクリックしてください。

次にSetup DOTweenをクリックします。

最後にApplyを押して窓を閉じれば準備完了です。

さっそく動かしてみる

まずはプロジェクトを作成して、3DObjectからCubeを作り、以下のC#スクリプトをアタッチします。x:10,y:0,z:0に1秒間かけて移動するというスクリプトです。

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

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOLocalMove(new Vector3(10f, 0, 0), 1f);
    }
}

実行結果

Image from Gyazo

移動する関数は他にも以下のものがあります。それぞれの軸やグローバル座標版もあるので、覚えておくとよいでしょう。

関数名と解説

  • DOLocalMoveX : X軸のみ移動
  • DOLocalMoveY : Y軸のみ移動
  • DOLocalMoveZ : Z軸のみ移動
  • DOMove : DOLocalMoveをグローバル座標を基準に移動
  • DOMoveX : DOLocalMoveXをグローバル座標を基準に移動
  • DOMoveY : DOLocalMoveYをグローバル座標を基準に移動
  • DOMoveZ : DOLocalMoveZをグローバル座標を基準に移動

またデフォルトではOutQuadというイージング(加速・減速)が使用されているので、緩急のついた動きになっています。以下の様に書くことで、一定速度で動く処理を実装できます。

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

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOLocalMove(new Vector3(10f, 0, 0), 1f).SetEase(Ease.Linear);
    }
}

実行結果

Image from Gyazo

一行でオブジェクトを動かせるのはすごいですよね。今回は、チェーンメソッドでイージングの設定を追加しましたが、様々な命令を追加できます。

イージングについて

特性説明使い所
EaseOut徐々に減速する外 → 中
EaseIn徐々に加速する中 → 外
EaseInOut徐々に加速して減速する中 → 中
Linear等速運動特殊

HPゲージの増減などはLinearが自然に使えると思います。

回転、拡大縮小

移動のスクリプトを書いたので、次によく使う回転、縮小拡大の3パターンについて、見ていきましょう。

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

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOLocalRotate(new Vector3(180f, 0, 0), 1f);
    }
}

実行結果

Image from Gyazo

回転には以下の関数も用意されてます。DOLocalRotateはオイラー角で指定し、DORotateQuaternionはQuaternionを指定するようになってます。

関数名と解説

  • DORotate : DOLocalRotateのグローバル座標を基準にした関数
  • DOLocalRotateQuaternion : Quaternionを使った回転
  • DORotateQuaternion : DOLocalRotateQuaternionのグローバル座標を基準にした関数

360度以上の回転

SetOptionsにfalseを代入すると360度以上の回転させられます。

using UnityEngine;
using DG.Tweening;

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOLocalRotate(new Vector3(0f, 720f, 0), 2f).SetOptions(false);
    }
}

実行結果

Image from Gyazo

指定した方向を向かせる

1秒間かけてTargetの方向に向かせるスクリプトです。

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

public class CDOTween : MonoBehaviour
{
    public Transform Target;

    void Start()
    {
        transform.DOLookAt(Target.localPosition, 1f);
    }
}

実行結果

Image from Gyazo

拡大縮小

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

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOScale(new Vector3(4f, 0.24f, 2f), 1f);
    }
}

実行結果

Image from Gyazo

DOScaletにもそれぞれの軸専用の関数が用意されてます。

関数名と解説

  • DOScaleX : X軸の拡大縮小
  • DOScaleY : Y軸の拡大縮小
  • DOScaleZ : Z軸の拡大縮小

指定時間待機してから実行する

ここまでの説明で、かかる時間、イージングの種類の設定の仕方はわかったので、次に開始のタイミングについて理解しましょう。以下のコードは、SetDelay(2f)と指定することで2秒待ってから、拡大縮小の開始をしてます。

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

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOScale(new Vector3(4f, 0.24f, 2f), 1f).SetDelay(2f);
    }
}

実行結果

Image from Gyazo

繰り返し

繰り返しには3種類のLoopTypeが用意されてます。

  • Yoyo : ヨーヨーのように行き来を繰り返す
  • Restart : 動作完了時に最初の状態に戻って繰り返す
  • Incremental : 完了時点の値に加算して繰り返す

// 動作完了時に最初に戻ってを10回繰り返す(第一引数:繰り返す回数、第二引数:LoopType)
SetLoop(10, LoopType.Restart);

Yoyo

以下のスクリプトでは-1を設定して、無限ループさせて、オブジェクトを行き来を繰り返すようにしてます。

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

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOLocalMove(new Vector3(10f, 0, 0), 1f).SetLoops(-1, LoopType.Yoyo);
    }
}

実行結果

Image from Gyazo

Restart

動作完了時に最初の状態に戻って繰り返します。

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

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOLocalMove(new Vector3(10f, 0, 0), 1f).SetLoops(-1, LoopType.Restart);
    }
}
Image from Gyazo

Incremental

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

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOLocalMove(new Vector3(2.5f, 0, 0), 1f).SetLoops(-1, LoopType.Incremental);
    }
}

実行結果

Image from Gyazo

SetLoopsのまとめ

  • SetLoopsで繰り返し処理を行う
  • 第一引数に回数を指定する
  • 第二引数にループするタイプを指定する

一時停止、再開

Start関数でコルーチンを使って0.5秒停止して、トゥイーンも停止して、0.5秒後に再開するスクリプトです。

ちなみにDOPauseやDOPlayの戻り値は、対象のトゥイーンの数になります。

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

public class CDOTween : MonoBehaviour
{
    IEnumerator Start()
    {
        transform.DOLocalMove(new Vector3(10f, 0, 0), 1f);
        yield return new WaitForSeconds(0.5f);
        // 一時停止
        transform.DOPause();
        yield return new WaitForSeconds(0.5f);
        // 再開
        transform.DOPlay();
    }
}
Image from Gyazo

移動と回転を組み合わせる

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

public class CDOTween : MonoBehaviour
{
    IEnumerator Start()
    {
        // 移動
        transform.DOLocalMove(new Vector3(10f, 0, 0), 1f);
        // 回転
        transform.DORotateQuaternion(Quaternion.AngleAxis(90f, Vector3.up), 0.25f)
            .SetLoops(4, LoopType.Incremental).SetEase(Ease.Linear);
        yield return new WaitForSeconds(0.5f);
        // 一時停止
        Debug.Log(transform.DOPause());   // 出力 : 2
        yield return new WaitForSeconds(0.5f);
        // 再開
        Debug.Log(transform.DOPlay());    // 出力 : 2
    }
}

実行結果

Image from Gyazo

最初からやり直す

1秒後に最初からやり直すスクリプトです。完了したトゥイーンは、最初からやり直せないので、注意してください。OnPauseとDOPlayも同様です。

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

public class CDOTween : MonoBehaviour
{
    IEnumerator Start()
    {
        transform.DOLocalMove(new Vector3(10f, 0, 0), 1f)
            .SetDelay(0.5f);
        yield return new WaitForSeconds(1f);
        // 最初からやり直す
        transform.DORestart();
    }
}

実行結果

Image from Gyazo

Restartの時にDelay(遅延)を無視する

Delayを使うと開始時間を遅らせられますが、

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

public class CDOTween : MonoBehaviour
{
    IEnumerator Start()
    {
        transform.DOLocalMove(new Vector3(10f, 0, 0), 1f)
            .SetDelay(0.5f);
        yield return new WaitForSeconds(1f);
        // 最初からやり直す
        transform.DORestart(false);
    }
}

DORestartにfalseを渡すとDelayで開始時に遅延する命令を無視できます。

最初の状態に戻してから止める

DORestartと似てますが、最初の時点に戻ったら止めます。

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

public class CDOTween : MonoBehaviour
{
    IEnumerator Start()
    {
        transform.DOLocalMoveX(10f, 1f);

        yield return new WaitForSeconds(0.5f);
        // 最初の状態に戻ってポーズ
        transform.DORewind();
    }
}
Image from Gyazo

DOReward後の再開方法

DOReward時もDOPlayで再開できます。

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

public class CDOTween : MonoBehaviour
{
    IEnumerator Start()
    {
        transform.DOLocalMoveX(10f, 1f);

        yield return new WaitForSeconds(0.5f);
        // 最初の状態に戻ってポーズ
        transform.DORewind();

        yield return new WaitForSeconds(0.5f);
        // トゥイーンを再開
        transform.DOPlay();
    }
}
using System.Collections;
using UnityEngine;
using DG.Tweening;

public class CDOTween : MonoBehaviour
{
    IEnumerator Start()
    {
        var tweener = transform.DOLocalMoveX(10f, 1f).SetEase(Ease.InOutQuart);
        yield return new WaitForSeconds(0.5f);
        tweener.Restart();
        tweener.Pause();
    }
}

こちらでも同じ効果になるので忘れてしまっても大丈夫です。

Image from Gyazo

コールバック関数

DOTweenには 開始時、終了時にイベントが受け取れるようにコールバック関数が定義されています。

コールバック実行タイミング呼ばれる回数
OnCompleteトゥイーン完了時0 or 1回
OnKillトゥイーン完了時1回
OnPlayトゥイーン開始時1回
OnPause一時停止時0回以上
OnRewindRestart時0回以上
OnStartトゥイーン開始時1回
OnStepComplete繰り返し時0回以上
OnUpdate毎フレーム0回以上
OnWaypointChange行き先が変更した時0回以上

たとえばOnUpdateはトゥイーン実行中、毎フレーム指定したメソッドを呼び出すといったことも可能です。OnCompleteは特によく使うので、覚えておきましょう。

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

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOLocalMove(new Vector3(10f, 0, 0), 1f)
            .OnComplete(CallBackFunction);
    }
    private void CallBackFunction()
    {
        Debug.Log("終了");
    }
}

実行結果

Image from Gyazo

スキップや中断

スキップや中断をしたい時は、DOComplete,DOKillを使います。

DOCompleteで即完了させる

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

public class CDOTween : MonoBehaviour
{
    IEnumerator Start()
    {
        transform.DOLocalMove(new Vector3(10f, 0, 0), 4f);
        yield return new WaitForSeconds(1);
        transform.DOComplete();
    }
}

実行結果

Image from Gyazo

DOKillで中断する

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

public class CDOTween : MonoBehaviour
{
    IEnumerator Start()
    {
        transform.DOLocalMove(new Vector3(10f, 0, 0), 4f);
        yield return new WaitForSeconds(1);
        transform.DOKill();
    }
}
Image from Gyazo

DOKillDOCompleteと違い完了状態にはなりません。もしDOKillで完了状態にしたければ、DOKillの引数にfalseを代入すると、DOCompleteと同様に完了状態にできます。DOKillを実行した状態でトゥイーンは完了します。DOPauseと似てますが、違いはその後DOPlayを実行しても再開できない点です。

相対値を使う

今までは、絶対値を使っていましたが、相対値を使って移動することもできます。相対値とは今いる座標を基準にして、指定した座標分だけ移動するという移動方法です。SetRelativeという関数で実行可能で以下のように書くだけです。

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

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOLocalMove(new Vector3(-5f, 0, 0), 1f).SetRelative(true);
    }
}

相対値指定の使い所

  1. ある特定の座標を取得
  2. その座標を基準に少し離れた場所に移動させる

この場合は、取得した座標を基準に次の座標を取得した方が楽なので、相対座標を使った方がよいです。

uGUIのRectTransformで移動、回転、拡大縮小

uGUIで使用するRectTransformクラスはTransformクラスのサブクラスです。

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

public class CDOTween : MonoBehaviour
{
    RectTransform _RectTransform;
    void Start()
    {
        // 移動
        _RectTransform.DOAnchorPos(new Vector2(240f, 0), 0.6f)
            .SetEase(Ease.OutBack);

        // 回転
        _RectTransform.DOLocalRotate(new Vector3(360f, 0, 0), 0.6f,
                RotateMode.FastBeyond360)
            .SetEase(Ease.OutCubic);

        // 拡大縮小
        _RectTransform.localScale = Vector3.one * 0.2f;
        _RectTransform.DOScale(1f, 0.6f)
            .SetEase(Ease.OutBack, 5f);
    }
}

uGUIの移動はRectTransformの拡張メソッドDOAnchorPosを、回転拡大縮小Transformのトゥイーンを使います。RotateMode.FastBeyond360は360度回転させるために、DOLocalRotate関数の引数として代入されています。

uGUIで移動トゥイーンを実装する時は、通常の移動メソッドDOLocalMoveを使うと思わぬ座標へ移動してしまう時があるので、アンカーを考慮した移動ができるDOAnchorPosを使うようにしましょう。

その他のuGUIの関数

  • DOPunchAnchorPos : 直線上の振動する
  • DOShakeAnchorPos : ランダム方向の振動する
  • DOJumpAnchorPos : ジャンプする

これらはTransformトゥイーンと同じ内容です。

色を変更する

DOColor

Graphicクラスに定義されているcolorプロパティを操作して色を変えられます。

  • Image
  • RawImage
  • Text

1.5秒後に赤色に変更する

using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;

public class CDOTween : MonoBehaviour
{
    Image _Image;
    void Start()
    {
        _Image.DOColor(new Color(1f, 0, 0), 1.5f);
    }
}
using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;

public class CDOTween : MonoBehaviour
{
    Image _Image;
    void Start()
    {
        _Image.DOColor(new Color(1f, 0, 0, 0), 1f).SetOptions(true);   
    }
}

DOColorにSetOptionsにtrueを渡してやるとアルファ値のみ反映されるようになります。

DOFade(透明度を変更)

DOFadeは透明度だけをトゥイーンさせます。Graphicクラスの他にCanvasGroupクラスでも
DOFadeは使用できます。

using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;

public class CDOTween : MonoBehaviour
{
    Image _Image;
    void Start()
    {
        _Image.DOFade(0.2f, 1.5f);
    }
}

DOFadeはDOColorで代用できる

using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;

public class CDOTween : MonoBehaviour
{
    Image _Image;
    void Start()
    {
        var color = _Image.color;
        color.a = 0;
        _Image.DOColor(color, 1.5f);
    }
}

DOFillAmount

Imageクラスで扱える関数です。画像を端から塗りつぶす事ができます。第一引数は0(映らない)~1(すべて映る)で、第二引数は変化にかかる秒数です。

using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;

public class CDOTween : MonoBehaviour
{
    public Image _Image;
    void Start()
    {
        _Image.DOFillAmount(1f, 1f)
            .SetEase(Ease.InQuart);
    }
}

実行結果

Fill Method : Radial 360

Image from Gyazo

Fill Method : Horizontal

Image from Gyazo

Fill Method : Horizontal

Image from Gyazo

DOText

文字をアニメーションさせるトゥイーンです。

using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;

public class CDOTween : MonoBehaviour
{
    public Text _Text;
    void Start()
    {
        _Text.DOText("ジェイのUnityプログラミング教室", 1f);
    }
}
Image from Gyazo

SetOptions(true)とやることで、リッチテキストを使うことができます。

using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;

public class CDOTween : MonoBehaviour
{
    public Text _Text;
    void Start()
    {
        _Text.DOText("ジェイのUnityプログラミング教室", 1f).SetOptions(true); ;
    }
}

画像と数字テキストの両方を扱う

using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;

public class CDOTween : MonoBehaviour
{
    public Text _Text;
    public Image _Image;
    private int _percent;

    private int Percent
    {
        get => _percent;
        set
        {
            _percent = value;
            float ratio = (float)value / 100f;
            // 円形ゲージのImage
            _Image.fillAmount = ratio;

            // %を表示するText
            _Text.text = $"{value.ToString()}%";
        }
    }
    
    void Start()
    {
        DOTween.To(() => Percent, x => Percent = x, 100, 1.5f)
            .OnStart(() => _Text.text = "Progress")
            .OnComplete(() => _Text.text = "Complete");
    }
}

実行結果

Image from Gyazo

int型を使うには

using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;

public class CDOTween : MonoBehaviour
{
    public Text _Text;
    void Start()
    {
        DOTween.To(() => 0, x => _text.text = x.ToString("0.00"), 100f, 2f).SetOptions(true);
    }
}

テキストの数字を0~100までの数字を2秒で変化させるプログラムです。

DOCounter

スカウターみたいに数字がどんどん上がっていくアニメーションができます。第一引数は始まりの値、第二引数は終了の値、第三引数はかかる秒数で第四引数はカンマ区切りのフラグです。

using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;

public class CDOTween : MonoBehaviour
{
    public Text _Text;
    void Start()
    {
        _Text.DOCounter(0, 18000, 2.5f);
    }
}
Image from Gyazo

数字以外の文字も入れる

using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;

public class CDOTween : MonoBehaviour
{
    public Text _Text;
    void Start()
    {
        DOTween.To(
            // 開始の値
            () => 0,
            // 更新処理
            x => _Text.text = $"HP : {x:N0}",
            // 完了の値
            18000,
            // トゥイーン時間(秒)
            2.5f);
    }
}
Image from Gyazo

Sequence グループ化

単体ではなくグループとしてトゥイーンを扱う方法です。普通に書くと以下の様にSetDelayを何度も書かなければいけませんが、グループ化をするとすっきり書けます。

transform.DOLocalMoveX(8f, 1f);
transform.DOLocalMoveY(1f, 1f).SetDelay(1f);
transform.DOLocalMoveX(5, 1f).SetDelay(2f);
transform.DOScale(3.5f, 0.3f).SetDelay(3f);

Sequenceでグループ化したコード

using UnityEngine;
using DG.Tweening;

public class CDOTween : MonoBehaviour
{  
    void Start()
    {
        DOTween.Sequence()
            .Append(transform.DOLocalMoveX(10f, 1f))
            .Append(transform.DOLocalMoveY(1f, 1f))
            .Append(transform.DOLocalMoveX(5f, 1f))
            .Append(transform.DOScale(3.5f, 0.3f));
    }
}

SetDelayがなくなったので、だいぶ短くなって見やすくなりましたよね。停止、GoTo、Restartなどの処理を一括で行えるには楽ですよね。Killする時もSequenceにまとめておけば、SequenceをKillするだけなので簡単です。

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

public class CDOTween : MonoBehaviour
{
    [SerializeField] Transform trans0;
    [SerializeField] Transform trans1;

    IEnumerator Start()
    {
        var seq = DOTween.Sequence();
        seq.Append(trans0.DOLocalMove(new Vector3(10f, 0, 0), 1.5f));
        seq.Append(trans1.DOLocalMove(new Vector3(0f, 2f, 0), 1f));

        yield return new WaitForSeconds(2f);
        // 複数のトゥイーンを一括でKill
        seq.Kill();
    }
}

その他のSequence

  • Apeend : 1つ前のトゥイーンが完了したら実行する
  • Insert : 第1引数に時間を指定して差し込む
  • Join : 1つ前のトゥイーンと同じタイミングで実行する
  • prepend : Sequenceの最初に挿入される

要する時間でなくスピードで移動速度を指定する

SetSpeedBasedにtrueを指定するとスピードベースで移動速度を指定できます。

using UnityEngine;
using DG.Tweening;

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOLocalMove(new Vector3(10f, 0, 0), 5f).SetSpeedBased(true);
    }
}

DOPunchPosition 直線状で振動させる

引数と解説

  1. 振動時の最大移動座標
  2. 移動に要する時間
  3. 振動数
  4. 振動する範囲
  5. スナップフラグ
using UnityEngine;
using DG.Tweening;

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOPunchPosition(new Vector3(5f, 0, 0), 2f, 5, 1f);
    }
}
Image from Gyazo

DOPunchRotation 回転して振動させる

引数の解説

  1. 振動時の回転値
  2. 回転に要する時間
  3. 振動数
  4. 振動する範囲
  5. スナップフラグ
using UnityEngine;
using DG.Tweening;

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOPunchRotation(new Vector3(180f, 270f, -45f), 2f, 5, 1f);
    }
}

実行結果

Image from Gyazo

直線状の振動する範囲

DOPunchPositionの引数

  1. 振動時の最大移動座標
  2. 移動に要する時間
  3. 振動数
  4. 振動する範囲
  5. スナップフラグ
using UnityEngine;
using DG.Tweening;

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOPunchPosition(
            // 振動時最大移動座標 
            new Vector3(5f, 0, 0),
            // トゥイーン時間(秒)
            2f,
            // 振動数 
            5,
            // 振動する範囲 
            1f,
            // スナップフラグ
            false);
    }
}

実行結果

Image from Gyazo

DOShakeでランダム振動させる

DOShakePosition,DOShakeRotation,DOShakeScaleの引数

  1. 移動に要する時間
  2. 振動の強さ
  3. 振動数
  4. 手振れ値
  5. スナップフラグ
  6. フェードアウト
using UnityEngine;
using DG.Tweening;

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOShakePosition(1f, 5f, 30, 1, false, true);
    }
}

実行結果

Image from Gyazo

第6引数のフェードアウトをtrueにしているので、徐々に振動が弱まっています。

Image from Gyazo

第六引数をfalseにすると振動が一定のままになります。このような揺れはカメラの振動にも使えそうですね。

DOShakeRotation 

ランダムに回転アニメーションさせます。

using UnityEngine;
using DG.Tweening;

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOShakeRotation(1f, 90f, 30, 90, true);
    }
}

実行結果

Image from Gyazo

DOShakeScale 

ランダムに拡大縮小のアニメーションをします。

using UnityEngine;
using DG.Tweening;

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOShakeScale(1f, 3f, 30, 90f, true);
    }
}

実行結果

Image from Gyazo

DOPath 複数の座標を指定したアニメーション

DOPathやDOLocalPathを使うことで様々なアニメーションを描くことができます。

DOPath、DOLocalPathの引数

  1. 移動する座標の配列
  2. 移動に要する時間
  3. PathType
  4. PathMode
  5. 解像度
  6. Gizmosの色

PathTypeについて

  • Path.Liner : 各座標を直線でつなぐ
  • Path.CatmullRom : CatmullRom曲線を使う
  • Path.CubicBezier : ベジュ曲線を使う
using UnityEngine;
using DG.Tweening;

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOLocalPath(
            new[]
            {
                new Vector3(4f, -1.2f, 0f),
                new Vector3(10f, 0f, 0f),
                new Vector3(5, 1.5f, 0),
            },
            3f, PathType.CatmullRom);
    }
}

実行結果

Image from Gyazo

開始座標まで戻す

SetOptionsにtrueを渡すと開始座標まで戻るようになります。

using UnityEngine;
using DG.Tweening;

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOLocalPath(
            new[]
            {
                new Vector3(4f, -1.2f, 0f),
                new Vector3(10f, 0f, 0f),
                new Vector3(5, 1.5f, 0),
            },
            3f, PathType.CatmullRom)
            .SetOptions(true);
    }
}

実行結果

Image from Gyazo

DOTweenを待機する(コルーチン、Task)

コルーチンを使って待機させる

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

public class CDOTween : MonoBehaviour
{
    IEnumerator Start()
    {
        yield return transform.DOLocalMove(new Vector3(10f, 0, 0), 1.5f)
            .WaitForCompletion();

        // (10f, 0, 0)へ向かうトゥイーンを待機後
        // (0f, 0, 0)へ向かうトゥイーンを開始
        transform.DOLocalMove(new Vector3(0f, 0, 0), 1.5f);
    }
}

実行結果

Image from Gyazo

Taskを使って待機させる

using UnityEngine;
using DG.Tweening;
using System.Threading.Tasks;

public class CDOTween : MonoBehaviour
{
    async Task Start()
    {
        await transform.DOLocalMove(new Vector3(10f, 0, 0), 1.5f)
            .AsyncWaitForCompletion();

        // (10f, 0, 0)へ向かうトゥイーンを待機後
        // (0f, 0, 0)へ向かうトゥイーンを開始
        transform.DOLocalMove(new Vector3(0f, 0, 0), 1.5f);
    }
}

実行結果

Image from Gyazo

AsyncWaitForCompletionはTaskを返却して、awaitして待機します。

DOJump 

DOLocalJump/DOJumpの引数

  1. ゴールの座標
  2. ジャンプする力
  3. ジャンプする回数
  4. ジャンプに要する時間
  5. スナップフラグ
using UnityEngine;
using DG.Tweening;

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOLocalJump(new Vector3(10f, 0, 0), 1f, 3, 1f).SetEase(Ease.Linear);
    }
}

実行結果

Image from Gyazo

逆方向へのジャンプ

using UnityEngine;
using DG.Tweening;

public class CDOTween : MonoBehaviour
{
    void Start()
    {
        transform.DOLocalJump(new Vector3(10f, 0, 0), -1.8f, 3, 1f).SetEase(Ease.Linear);
    }
}

実行結果

Image from Gyazo

指定時間を飛ばして実行する

DOGoto関数で指定した時間に飛ばします。

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

public class CDOTween : MonoBehaviour
{
    IEnumerator Start()
    {
        var tween = transform.DOLocalMove(new Vector3(10f, 0, 0), 5f)
            .SetEase(Ease.Linear);
        yield return new WaitForSeconds(1f);
        // 1秒後にトゥイーン時間4秒のタイミングにジャンプする
        tween.Goto(4f, true);
    }
}

実行結果

Image from Gyazo

+3