【Unity】DOTweenの使い方
こんにちは!ジェイです。みなさんはUnityを使う時にDOTweenというアセットを知っていますか?DOTweenは様々な動きを簡単に記述できて、チェーン状につないで行くことで、複雑な動きを簡単に表現することができる便利なアセットです。
- 1. ダウンロードと準備
- 2. さっそく動かしてみる
- 3. 回転、拡大縮小
- 4. 指定した方向を向かせる
- 5. 拡大縮小
- 6. 指定時間待機してから実行する
- 7. 繰り返し
- 8. Incremental
- 9. SetLoopsのまとめ
- 10. 一時停止、再開
- 11. 最初からやり直す
- 12. Restartの時にDelay(遅延)を無視する
- 13. 最初の状態に戻してから止める
- 14. DOReward後の再開方法
- 15. コールバック関数
- 16. スキップや中断
- 17. DOKillで中断する
- 18. 相対値を使う
- 19. uGUIのRectTransformで移動、回転、拡大縮小
- 20. その他のuGUIの関数
- 21. 色を変更する
- 22. DOFillAmount
- 23. DOText
- 24. DOCounter
- 25. Sequence グループ化
- 26. DOPunchPosition 直線状で振動させる
- 27. DOPunchRotation 回転して振動させる
- 28. 直線状の振動する範囲
- 29. DOShakeでランダム振動させる
- 30. DOShakeRotation
- 31. DOShakeScale
- 32. DOPath 複数の座標を指定したアニメーション
- 33. DOTweenを待機する(コルーチン、Task)
- 34. DOJump
- 35. 指定時間を飛ばして実行する
ダウンロードと準備
上記の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);
}
}
実行結果
移動する関数は他にも以下のものがあります。それぞれの軸やグローバル座標版もあるので、覚えておくとよいでしょう。
関数名と解説
- 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);
}
}
実行結果
一行でオブジェクトを動かせるのはすごいですよね。今回は、チェーンメソッドでイージングの設定を追加しましたが、様々な命令を追加できます。
イージングについて特性 説明 使い所 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);
}
}
実行結果
回転には以下の関数も用意されてます。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);
}
}
実行結果
指定した方向を向かせる
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);
}
}
実行結果
拡大縮小
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);
}
}
実行結果
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);
}
}
実行結果
繰り返し
繰り返しには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);
}
}
実行結果
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);
}
}
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);
}
}
実行結果
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();
}
}
移動と回転を組み合わせる
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
}
}
実行結果
最初からやり直す
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();
}
}
実行結果
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();
}
}
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();
}
}
こちらでも同じ効果になるので忘れてしまっても大丈夫です。
コールバック関数
DOTweenには 開始時、終了時にイベントが受け取れるようにコールバック関数が定義されています。コールバック 実行タイミング 呼ばれる回数 OnComplete トゥイーン完了時 0 or 1回 OnKill トゥイーン完了時 1回 OnPlay トゥイーン開始時 1回 OnPause 一時停止時 0回以上 OnRewind Restart時 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("終了");
}
}
実行結果
スキップや中断
スキップや中断をしたい時は、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();
}
}
実行結果
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();
}
}
DOKillはDOCompleteと違い完了状態にはなりません。もし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);
}
}
相対値指定の使い所
- ある特定の座標を取得
- その座標を基準に少し離れた場所に移動させる
この場合は、取得した座標を基準に次の座標を取得した方が楽なので、相対座標を使った方がよいです。
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
Fill Method : Horizontal
Fill Method : Horizontal
DOText
文字をアニメーションさせるトゥイーンです。
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;
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");
}
}
実行結果
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);
}
}
数字以外の文字も入れる
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);
}
}
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 直線状で振動させる
引数と解説
- 振動時の最大移動座標
- 移動に要する時間
- 振動数
- 振動する範囲
- スナップフラグ
using UnityEngine;
using DG.Tweening;
public class CDOTween : MonoBehaviour
{
void Start()
{
transform.DOPunchPosition(new Vector3(5f, 0, 0), 2f, 5, 1f);
}
}
DOPunchRotation 回転して振動させる
引数の解説
- 振動時の回転値
- 回転に要する時間
- 振動数
- 振動する範囲
- スナップフラグ
using UnityEngine;
using DG.Tweening;
public class CDOTween : MonoBehaviour
{
void Start()
{
transform.DOPunchRotation(new Vector3(180f, 270f, -45f), 2f, 5, 1f);
}
}
実行結果
直線状の振動する範囲
DOPunchPositionの引数
- 振動時の最大移動座標
- 移動に要する時間
- 振動数
- 振動する範囲
- スナップフラグ
using UnityEngine;
using DG.Tweening;
public class CDOTween : MonoBehaviour
{
void Start()
{
transform.DOPunchPosition(
// 振動時最大移動座標
new Vector3(5f, 0, 0),
// トゥイーン時間(秒)
2f,
// 振動数
5,
// 振動する範囲
1f,
// スナップフラグ
false);
}
}
実行結果
DOShakeでランダム振動させる
DOShakePosition,DOShakeRotation,DOShakeScaleの引数
- 移動に要する時間
- 振動の強さ
- 振動数
- 手振れ値
- スナップフラグ
- フェードアウト
using UnityEngine;
using DG.Tweening;
public class CDOTween : MonoBehaviour
{
void Start()
{
transform.DOShakePosition(1f, 5f, 30, 1, false, true);
}
}
実行結果
第6引数のフェードアウトをtrueにしているので、徐々に振動が弱まっています。
第六引数をfalseにすると振動が一定のままになります。このような揺れはカメラの振動にも使えそうですね。
DOShakeRotation
ランダムに回転アニメーションさせます。
using UnityEngine;
using DG.Tweening;
public class CDOTween : MonoBehaviour
{
void Start()
{
transform.DOShakeRotation(1f, 90f, 30, 90, true);
}
}
実行結果
DOShakeScale
ランダムに拡大縮小のアニメーションをします。
using UnityEngine;
using DG.Tweening;
public class CDOTween : MonoBehaviour
{
void Start()
{
transform.DOShakeScale(1f, 3f, 30, 90f, true);
}
}
実行結果
DOPath 複数の座標を指定したアニメーション
DOPathやDOLocalPathを使うことで様々なアニメーションを描くことができます。
DOPath、DOLocalPathの引数
- 移動する座標の配列
- 移動に要する時間
- PathType
- PathMode
- 解像度
- 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);
}
}
実行結果
開始座標まで戻す
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);
}
}
実行結果
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);
}
}
実行結果
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);
}
}
実行結果
AsyncWaitForCompletionはTaskを返却して、awaitして待機します。
DOJump
DOLocalJump/DOJumpの引数
- ゴールの座標
- ジャンプする力
- ジャンプする回数
- ジャンプに要する時間
- スナップフラグ
using UnityEngine;
using DG.Tweening;
public class CDOTween : MonoBehaviour
{
void Start()
{
transform.DOLocalJump(new Vector3(10f, 0, 0), 1f, 3, 1f).SetEase(Ease.Linear);
}
}
実行結果
逆方向へのジャンプ
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);
}
}
実行結果
指定時間を飛ばして実行する
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);
}
}
実行結果