2019年12月7日この記事ではTweenアセットとは何なのか?その中でもDOTweenを選ぶ理由と、Unity標準のアニメーション機能であるMecanim(Animator)との使い分けについて解説していきます。DOTweenで出来ることのイメージ用として、サンプルゲームを作りました。サンプルゲームに使用しているユニティちゃんモデル及び背景はユニティちゃんライセンスの元に提供されています。Japan/UCLユニティちゃんのモーション以外は、DOTweenを使用してアニメーションを付けています。※1フレーム毎にオブジェクトの表示/非表示を繰り返すと半透明っぽく見えるという手法を使っているため、動画のフレームレートが落ちていると表示されたまま、もしくは完全に消えていることがあります。比較の前にTweenアセットの比較TweenとMecanimの使い分け使い分けが必須になるケース要検討なケースまとめTweenアセットとはスクリプトから移動値と時間を指定してアニメーションを実行する機能を提供してくれるアセット(ライブラリ)です。移動値と書きましたが、移動以外に回転やスケールなど、様々なパラメータをアニメーションさせることができます。された時など、必要なタイミングで処理をはさむことができます。アニメーションの完了時は追加の処理をしたいことが多いため、便利です。Easing指定Unity標準のアニメーション機能で使われているアニメーションカーブを使ってアニメーションさせることも可能ですが、Easing指定をすることで気持ちいいアニメーションを気軽に実現できます。現実世界で物が等速で移動することはあまりありません。アニメーションにカーブをつけることで、より自然に見えます。Easingの概念はUnityのTweenアセットに限ったものではなく、WebのjQueryなどでも同じです。種類ごとの動きは以下のサイトで見れます。function.比較の前にTweenアセットを比較する上で重要なのは使いやすさもありますが、処理性能の問題です。GC(ガベージコレクション)とGCAllocが重要なので、まずこちらを解説します。これだけで一冊の分厚い本が出るくらい深い内容なのでここでは簡単に説明します。ご存知の方は読み飛ばして下さい。GC(ガベージコレクション)C#ではプログラマが確保したメモリ(ヒープメモリ)は使われなくなると自動的に解放されます。これをGC(ガベージコレクション)と言います。このGCの処理は非常に重いです。GCの頻度が多いと処理性能の低い環境ではゲーム画面がカクカクしてしまうことになります。アニメーションをたくさん付けたのに、ゲーム画面がカクカクしてしまっては綺麗に見えなくて勿体ないですよね。そこで意識するべきなのがGCAllocです。GCAllocGCが発生する原因となるのがヒープメモリへのメモリ確保であるGCAllocです。このGCAlloc自体も重い処理です。先ほどからヒープメモリと書いていますが、GCAllocが発生しないメモリ確保はスタックメモリの確保です。スタックメモリはメソッド内だけで使うことが確定しているメモリ確保(つまりローカル変数)で、メソッドを抜けたら解放されます。ヒープメモリの確保はロード画面で済ませておき、ゲーム中はスタックメモリで済ませるというのがメモリ最適化の基本思想です。C#でGCAllocが発生する処理としては、主に以下のようなものがあります。LINQクラス、配列のnew文字列の操作デリゲートGCの仕組みとして、確保したメモリが使われているか(nullじゃないか)を調査して使われていなかったらメモリ解放を実行します。ゲームの途中で使われなくなるようなGCAllocをゲーム中に行ってしまうと、GCAllocとGCの両方が発生することになります。アニメーションに当てはめると、再生開始する時にアニメーション制御用クラスのインスタンス生成を行うとGCAllocが発生し、終了時にもう使わないからとnullにするとGCが発生するわけです。GCAllocが発生しているかどうかは、Profilerで確認することができます。DOTweenでは、このGCAllocをうまく防止しています。DOTweenのGCAlloc防止策DOTweenにはTweenとSequenceという機能がありますが、最初にTween200個、Sequence50個のメモリを自動で確保します。(この数は変更可能)この最初に確保する数をCapacityといって、例えばC#の標準機能でもListなどのコレクションはCapacityを引数にとることでGCAllocの防止策を提供しています。多めに確保するっていいの?使わないかもしれないのに多めにメモリを確保しちゃって大丈夫なの?という話ですが、これはメモリが限られている昔の環境では問題でした。今はPCでもスマートフォンでも潤沢なメモリがあり、小さなメモリを気にして節約するくらいなら、最初に多めに確保してしまった方がGCAllocが防止できて良い。いう考え方が主流になってきています。Unityの最新機能であるDOTSも、この考え方で作られています。Tweenアセットの比較すべて無料です。tweenin...聞いたことのある方や使っている方もいるでしょうか?ほんの数年前であれば、一番人気のあったTweenアセットです。機能も充実していて使いやすいですが、先ほど解説したGCAllocを伴い重いため、今となっては使わない方が良いでしょう。n...こちらはDOTweenの前身です。現在は特に使う理由はありません。or...現在DOTween以外で良いTweenアセットはこれです。iOSへの最適化を売りにしていて、パフォーマンスは非常に良いです。有名タイトルで使われている実績もあります。DOTweenのサイトですが性能比較があり、こちらでもLeanTweenの性能面の凄さが分かります。GitHub.僕も上記のDOTweenのサイトにある性能比較で初めて知ったのですが、日本語で使い方の解説などが全然ないことも考えるとわざわざ選ぶ理由はないでしょう。is...LeanTweenよりもDOTweenの方が機能の面で充実しているので、特に深い理由がなければDOTweenをオススメしています。以前は日本語で使い方の解説記事なども少なかったのですが、最近は増えてきました。TweenとMecanimの使い分けMecanimはUnity標準のアニメーション機能です。アニメーションシステムあなたの作品をどこへでも!Unityはゲームやグラフィカルなアプリケーションを開発するための最高の開発環境です。Oneなどのゲーム機、さらに多くの幅広いプラットフォー...Animator、AnimatorController、AnimationClipなどの機能を組み合わせて、ステート形式でアニメーションを作成します。使い分けが必須になるケースMecanimキャラクターモーションです。スキンメッシュアニメーションと呼ばれているものになります。こちらはTweenでは対応できないため、Mecanimが必須です。先ほどのサンプルゲームでも、ユニティちゃんのモーションはMecanimを使用しています。Tween(もしくは自前スクリプト)ゲームの状況によってパラメータが変化するアニメーションです。Mecanimは事前に作成した固定アニメーションを再生するものなので、例えば移動先が状況に応じて変わる場合、その分だけアニメーションを作成しておく必要がありパターンが多すぎると現実的ではありません。Tweenであれば、スクリプト上で移動先を指定するだけなので簡単です。要検討なケースアーティストが調整するアニメーションTweenはスクリプト上でアニメーションを作っていくので、エンジニア以外が調整するのが難しいです。調整が必要な場合、パラメータをInspectorから調整できるようにしておくなどの対応をします。Mecanimであれば、Mayaなどで作成したデータのインポートに対応しています。Unity上でも専用エディタで調整が可能です。アニメーションの対象が多い場合Mecanimのアニメーションを再生するには、対象全てにAnimatorコンポーネントを付ける必要があります。これは少なからずメモリに負荷をかけます。Tweenであれば特にコンポーネントを付けておく必要はなく、スクリプトから指定すればそのタイミングで実行できます。性能比較からも分かる通り、DOTweenやLeanTweenであれば大量のアニメーション実行に対応できます。ブレンドしたい場合アニメーションをブレンドしたい場合、MecanimであればAnimatorControllerにはBlendTreeやステート遷移時にブレンドする機能があり、簡単に対応できます。Tweenの場合は難しく、基本的には1つ前のアニメーションを止めてから新しいアニメーションを再生することになります。ブレンドには不向きと言えるでしょう。アニメーション完了時に何かしたい場合Mecanimはステートマシンで管理する関係上、「既に終了しているか」は取得しやすいものの、終了したタイミングで何か処理をするということが難しく、若干テクニックが必要です。Tweenであれば、先述した完了時のコールバックで対応できます。まとめ以上を踏まえてMecanimとTweenを使い分けつつ、Tweenに関してはパフォーマンスや利便性の面で優れているDOTweenを使うことをオススメします。ゲームの見た目はアニメーションをたくさん付けていくことで確実に良くなっていくので、積極的に使っていきましょう!DOTweenの具体的な使い方については次の記事で解説しています。Tweenアニメーション入門【Unity】UnityでTweenアニメーションを行うのに最適なアセットであるDOTweenの使い方について。基本形から、よく使うオプション、便利なDOTween.ToやSequenceの機能、DOTweenを使う上での注意点など幅広く扱っています。アマガミナブログUnityエンジニア天神いなスマートフォンゲーム会社で新作ゲーム開発のリードエンジニアをしながら個人ゲームの開発もしています。当サイトでは、UnityやC#、シェーダなどゲーム開発の技術的なことを扱ったり、自作ツールの紹介などをしています。