コガネブログ

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

【Unity】シンプルなテキストは TextMesh Pro を使わずにスプライトフォントを自作した方が処理が速い

検証内容

  • 上記のように 0.1 秒ごとに表示が変化するテキストを
    シーンに 5,000 個配置する場合に
    TextMesh Pro で表示した時と自作のスプライトフォントで表示した時の FPS を比較

検証環境

  • Unity 2021.3.1f1

TextMesh Pro の場合

6 FPS

自作のスプライトフォントの場合

50 ~ 60 FPS

結論

スプライトフォントを自作すると処理が速くなる

自作のスプライトフォントのスクリプトの例

using System;
using UnityEngine;

public sealed class SpriteFont : MonoBehaviour
{
    [SerializeField] private Sprite[]         m_spriteArray;
    [SerializeField] private SpriteRenderer[] m_spriteRendererArray;
    [SerializeField] private float            m_interval;

    private void Awake()
    {
        SetValue( 0 );
    }

    public void SetValue( int value )
    {
        var digits = value == 0 ? 1 : ( int ) Math.Log10( value ) + 1;

        for ( var i = 0; i < m_spriteRendererArray.Length; i++ )
        {
            var reversedIndex  = digits - i - 1;
            var x              = m_interval * reversedIndex - ( m_interval * digits * 0.5f ) + m_interval * 0.5f;
            var spriteRenderer = m_spriteRendererArray[ i ];

            spriteRenderer.transform.localPosition = new Vector3( x, 0, 0 );

            if ( digits <= i )
            {
                spriteRenderer.enabled = false;
                continue;
            }

            var index = value % 10;

            spriteRenderer.enabled = true;
            spriteRenderer.sprite  = m_spriteArray[ index ];

            value /= 10;
        }
    }
}

検証プロジェクト