C#
game
Unity
Asset
Tween

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

概要

タイトル通り、ゲーム開発などで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の変化を確認するときに非常にお世話になっています。助かります。