コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】シンプルなスプライトアニメーションは Animator を使わずに自作した方が処理が速い

検証内容

  • 10,000 個のスプライトをシーンに配置
  • Unity の Animator を使用してスプライトアニメーションを再生した場合と、
    自作の C# スクリプトでスプライトアニメーションを再生した場合の FPS を比較

検証環境

  • Unity 2021.3.1f1

Unity の Animator を使用した場合

11 ~ 12 FPS

自作のスプライトアニメーションの場合

30 ~ 40 FPS

結論

  • シンプルなスプライトアニメーションなら Unity の Animator を使用せずに
    C# スクリプトでスプライトアニメーションの仕組みを自作すると処理が速くなる

自作のスプライトアニメーションのスクリプトの例

using UnityEngine;

public sealed class LightWeightSpriteAnimation : MonoBehaviour
{
    [SerializeField] private Sprite[]       m_spriteArray;
    [SerializeField] private SpriteRenderer m_spriteRenderer;
    [SerializeField] private float          m_duration;

    private int   m_frame;
    private float m_elapsedTime;

    private void Start()
    {
        m_spriteRenderer.sprite = m_spriteArray[ m_frame ];
    }

    private void Update()
    {
        m_elapsedTime += Time.deltaTime;

        if ( m_elapsedTime < m_duration ) return;

        m_elapsedTime -= m_duration;
        m_frame       =  ( m_frame + 1 ) % m_spriteArray.Length;

        m_spriteRenderer.sprite = m_spriteArray[ m_frame ];
    }
}

検証プロジェクト