Unity3Dのアニメーション最適化

Unity3Dでタイムラプスアニメーションを使用する



確かに、 Unity 5で新しいアニメーションを作成すると、スプライトコンポーネントSpriteRendererへのリンクがすぐに配置されることがわかりましたUnityは準備されたフレームを選択し、 アニメーションウィンドウにドラッグするために呼び出します。







いくつかのマウスの動きと新しいアニメーションがゲームを飾ります。 ただし、ビデオの1秒間には12〜30フレームが必要です。 また、キャラクターが実行、読み取り、植物、散水、演劇、日光浴などのさまざまな動作を実行する場合、すべてのアニメーションの継続時間は1分を超え、1000フレームになります。 そして、キャラクターはレベル上の唯一のアニメートされたオブジェクトではありません。 そのため、それほど複雑ではないシーンのロードには1分以上かかり、メモリオーバーランによりUnityがクラッシュし始めます。 はい、もちろん、組み込みのUnity SpritePackerを使用してスプライトをアトラスパックすることは可能ですが、これはわずかな結果とパフォーマンスの改善を10〜20%だけ提供します。







フレームごとの骨格アニメーションの置き換え



より具体的な結果を得るために、フレームごとのアニメーションを骨格のアニメーションに置き換えることにしました。 スプライトが描画される長方形の代わりに、より複雑なモデルが作成され、その上にアトラスのキャラクターの一部が描画されます。







このモデルの動きにより、アニメーションが取得されます。 心配しないでください、実際、すべてが簡単です! ユニットの骨格2Dアニメーションを作成するためのツールがいくつかあります: SpineDragonBonesAnima2DAdobe Flashなど。

なぜなら 私たちのアーティストはすべてのアニメーションをFlashで行い、 GAFは私たちにとって最高でした。



FlashからUnity3Dにアニメーションをインポートする



  1. Unity AssetStoreからGAFをインポートします。
  2. * .swfファイルをコンバーターウィンドウにドラッグします。
  3. オブジェクトを作成して構成します。 すべての設定は直感的です:






Flashで作成されたマークアップに従って、アニメーションが自動的に作成されます。



必要なアニメーションを開始するには、スクリプトを使用します。



using UnityEngine; using GAF.Core;//   GAF public class Mouse : MonoBehaviour { //      [SerializeField] private GAFMovieClip GAFMovieClip; void Update () { if (Input.GetKeyDown(KeyCode.RightArrow))//   "" GAFMovieClip.setSequence("run", true);//  run  } }
      
      





Unity Animatorでトランジションをカスタマイズする



GAFProバージョンでは、ネイティブUnityアニメーターを使用することができ、これにより開発がはるかに簡単になります。 ただし、このタイプのアニメーションはミキシングをサポートしていないことを覚えておく必要があります。 Unityはデフォルトでクリップミキシングを有効にします。 そのため、クリップ間のトランジションでアニメーションを歪めることができます。 アニメーションをスムーズに機能させるには、クリップの混合を無効にします。







アニメーションクリップの編集



Flashで必要なクリップを作成しなかったことが判明した場合、 updateToFrameAnimator()関数を呼び出し、目的のフレームをパラメーターとして指定することで、それらをUnityで直接アセンブルできます。







要約:



そのため、フレームごとのアニメーションをFlashで作成されたアニメーションに置き換えると、シーンの読み込み時間が10倍短縮されました。 したがって、RAMの消費は大幅に削減されました。



便利なリンク:



ビデオレッスン「Unity3DでのFlashアニメーションの使用」

GAF:FlashアニメーションをUnity3dにインポートする



All Articles