DOTween 基本を学ぶ
DOTween とは
DOTween is a fast, efficient, fully type-safe object-oriented animation engine for Unity, optimized for C# users, free and open-source, with tons of advanced features. (DOTweenは、高速で効率的、完全に型安全なUnity用オブジェクト指向アニメーションエンジンで、C#ユーザーのために最適化されており、フリーでオープンソースで、多くの高度な機能を備えています。)
UnityでTweenを扱いたいときに有名なアセット.
「Tween」とは開始時の情報と終了時の情報を入力として、途中の経過状態を補間して表現する方法.
DOTween準備
下記の二つを記述する.
// DOTweenを使用する場合は,DG.Tweeningをusingに入れる using DG.Tweening; // DOTweenの初期化 (StartかAwakeで呼び出す) DOTween.Init();
DOTween 基本的なAPI
DOMove
派生形として,DORotate,DOMoveX,DOMoveY,DOMoveZ,DOLocalMoveがある. 第一引数:移動先のポジション,第二引数:何秒で移動するか指定
DOMove(new Vector3(5, 5, 0), 1);
Append
複数のアニメーションを直列結合できるようになる. Sequence型の変数でDOTween.Sequence()を設定する必要がある. (Streamみたいなイメージ?)
Sequence moveSequence = DOTween.Sequence(); moveSequence.Append(_cube.transform.DOMoveX(5, 1)); moveSequence.Append(_cube.transform.DOMove(new Vector3(5, 5, 0), 1)); moveSequence.Append(_cube.transform.DOMoveY(5, 1)); moveSequence.Append(_cube.transform.DOMove(Vector3.zero, 1));
Join
複数のアニメーションを並列結合できるようになる.
同じくSequence型の変数でDOTween.Sequence()を設定する必要がある.
こっちはparallelStreamみたいなイメージ?
Sequence moveSequence = DOTween.Sequence(); moveSequence.Append(_cube.transform.DOMoveX(5, 1)); moveSequence.Append(_cube.transform.DOMove(new Vector3(5, 5, 0), 1)); moveSequence.Append(_cube.transform.DOMoveY(5, 1)); moveSequence.Append(_cube.transform.DOMove(Vector3.zero, 1)); moveSequence.Join(_cube.transform.DORotate(new Vector3(180, 275, 180), 4));
SetLoops
一連のアニメーションをループすることができる. 引数に何回ループするかを設定する.-1にすると無限ループ.
Sequence moveSequence = DOTween.Sequence(); moveSequence.Append(_cube.transform.DOMoveX(5, 1)); moveSequence.Append(_cube.transform.DOMove(new Vector3(5, 5, 0), 1)); moveSequence.Append(_cube.transform.DOMoveY(5, 1)); moveSequence.Append(_cube.transform.DOMove(Vector3.zero, 1)); moveSequence.Join(_cube.transform.DORotate(new Vector3(180, 275, 180), 4)); moveSequence.SetLoops(-1);
メソッドチェーン
メソッドチェーンで書くことができる.ア!これしゅき♥
DOTween.Sequence() .Append(_cube.transform.DOMoveX(5, 1)) .Append(_cube.transform.DOMove(new Vector3(5, 5, 0), 1)) .Append(_cube.transform.DOMoveY(5, 1)) .Append(_cube.transform.DOMove(Vector3.zero, 1)) .Join(_cube.transform.DORotate(new Vector3(180, 275, 180), 1)) .SetLoops(-1);
SetEase
アニメーションにEasing設定できる.
Easing設定したいアニメーションの直後にSetEase()を記述する.
Easing CheatSheet
Easingの数が多くて全部覚えきれない.
この記事を見て視覚的に理解するしかない.
Sineはあのサインで,Expoはあの指数関数なのはイメージできる.
jQueryやCSSでもちょっと使った覚えがあるけどすぐ忘れる.
DOTween.Sequence() .Append(_cube.transform.DOMoveX(5, 1)) .Append(_cube.transform.DOMove(new Vector3(5, 5, 0), 1)) .Append(_cube.transform.DOMoveY(5, 1)) .Append(_cube.transform.DOMove(Vector3.zero, 1)) .Join(_cube.transform.DORotate(new Vector3(180, 275, 180), 1)) .SetLoops(-1);
OnComplete
アニメーションが終わった後に関数を呼ぶことができる.
[SerializeField] private GameObject _cube; void Start() { DOTween.Init(false, true, LogBehaviour.ErrorsOnly); DOTween.Sequence() .Append(_cube.transform.DOMoveX(5, 1)).SetEase(Ease.InSine) .Append(_cube.transform.DOMove(new Vector3(5, 5, 0), 1)).SetEase(Ease.InQuad) .Append(_cube.transform.DOMoveY(5, 1)).SetEase(Ease.OutCubic) .Append(_cube.transform.DOMove(Vector3.zero, 1)).SetEase(Ease.OutExpo) .Join(_cube.transform.DORotate(new Vector3(180, 275, 180), 1)) .OnComplete(Disappear); // .SetLoops(-1); } void Disappear() { _cube.SetActive(false); }
DOColor
Colorをアニメーションさせることができる. フェードイン,フェードアウトによく使われる.
α値を変更するだけの場合は,DOFadeもある.
DOTween.Sequence() .Append(_cube.transform.DOMoveX(5, 1)).SetEase(Ease.InSine) .Append(_cube.transform.DOMove(new Vector3(5, 5, 0), 1)).SetEase(Ease.InQuad) .Append(_cube.transform.DOMoveY(5, 1)).SetEase(Ease.OutCubic) .Append(_cube.transform.DOMove(Vector3.zero, 1)).SetEase(Ease.OutExpo) .Join(_cube.transform.DORotate(new Vector3(180, 275, 180), 1)) .Append(_panel.GetComponent<Renderer>().material.DOColor(new Color(0, 0, 0, 1), 1)) .OnComplete(LoadScene);
To
任意のプロパティやクラス変数をTweenする場合によく使われる.
int score = 0; DOTween.To( getter: () => score, // Tweenしたい対象の取得 setter: num => score = num, // Tweenしたい対象の設定 endValue: 100, // 最終的な値 duration: 1.0f // アニメーション時間 );
こんな使い方もある.
参考資料・記事
パフォーマンス的にはLeanTweenの方がいいらしいけどAPIはDOTweenに比べて豊富ではないらしい. qiita.com
終わりに
次からのゲームジャム系では積極的にDOTween使っていこう. Proを半額時に購入したのでせっかくだし利用しない手はないね. メソッドチェーンで書けるの好きなんだよな.