Edited at

【Unity】【Tween】Unity でどのTweenアセットを使うか悩んでいる方へ

More than 1 year has passed since last update.


概要

タイトル通り、ゲーム開発などでUnityを使うとき、Tween(後述)を扱いたいときに

どのアセットを使うか悩んでいる(主に初心者)向けの記事です。


結論

パフォーマンス重視: LeanTween

パフォーマンスそこそこに色々やりたい:DOTween

選択の候補から外そう:iTween


Tween とは

Tween は「Between」が由来な通り、開始時の情報と終了時の情報を入力として、

途中の経過状態を補間して表現する方法です。


Unity におけるTween

Tweenアニメーションを行う方法はいくつかあります


  • Tween 系Assetを使う


    • iTween

    • DOTween

    • LeanTween



  • コルーチンによる実装(Tween系Assetを入れたくない時や、Assetじ表現できない場合など)

  • Update文の中に処理を書いて実装(スパゲティコード生成の元になりやすいので、超絶非推奨)


Tween 系アセットの利点

Tween系アセットの利点としては


  • 少ないコード量で実装できる


  • メソッドチェーンで記述可能なため挙動を把握しやすい(一部Assetのみ)

  • 低負荷でプログラムによるアニメーションを実現できる(一部Asset)


パフォーマンス検証


DOTween 公式での検証

DOTween の公式で色々検証されています。

スクリーンショット 2018-06-12 10.58.58.png

( 画像は公式サイト より引用 )


手元の環境で検証


環境


  • Unity2017.4.5.f1

  • LeanTween ver 2.46

  • DOTween ver1.1.710

  • Tween でfloat 値を変動させるのを5000 個同時に行う

  • Tween でTransform を操作するのを5000 個同時に行う

https://github.com/Cova8bitdots/TweenPerformance


結果

Tween
float
Transform

DOTween
3.5ms
1ms

LeanTween
0.6ms
5ms

追記: 友人から「GC調べないとダメだろ」と指摘を頂き、まさにその通りなので計測したところ

Tween
1st
2nd

DOTween
446B
0B

LeanTween
0B
0B

という具合でDOTween のみ初回でGCが発生していました。

(TweenManager.Despawn()でGCがあるのを確認)

なぜ初回なのかは現在調査中なため、わかり次第追記していこうと思います。

パフォーマンスで言えば LeanTween > DOTween >>>>>> iTween という感じです


LeanTween の注意点

LeanTween はパフォーマンスは非常に良いですが、APIが結構省かれています。

ex)


  • LeanTween.Complete() のような強制的にCompleteを呼べない

  • LeanTween.Stop() のように停止できない

  • Shake のような演出系の操作はsequence で頑張って実装しないといけない

  • RectTransform.anchoredPosition をmove できない

これらに関してはDOTweenに関してはAPIが提供されているので

「パフォーマンスをとるか」「使いやすさをとるか」で

LeanTweenを選ぶか、DOTweenを選ぶか選択すると良いと思います。


参考など

DOTweenをふわっとまとめてみた

 使い方がわからない人(公式ドキュメント見てもわからんちんな人)は参考になると思います。

LeanTweenの拡張

LeanTween の拡張を公開されています。LeanTweenを導入する際は検討しても良いかもしれません。

(ブログではDOTweenはdll化されて内部が見えないとありますが、ページトップのリンクの通りGithubで公開されているOSSです)

EaseTypeDemo

 Easeの変化を確認するときに非常にお世話になっています。助かります。