コガネブログ

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

【Unity】TextMesh Pro で数値を設定する時に GC Alloc が発生しない拡張メソッド「TMP_IntegerText.cs」紹介

ソースコード

使い方

var text = GetComponent<TMP_Text>();
text.SetText( 123 );

検証

using TMPro;
using UnityEngine;
using UnityEngine.Profiling;

public class Example : MonoBehaviour
{
    public TMP_Text m_text;

    private void Update()
    {
        var num = 25;

        var samplerA = CustomSampler.Create( "# ToString" );
        samplerA.Begin();

        m_text.text = num.ToString();

        samplerA.End();

        var samplerB = CustomSampler.Create( "# TMP_Text.SetText" );
        samplerB.Begin();

        m_text.SetText( "{0}", num );

        samplerB.End();

        var samplerC = CustomSampler.Create( "# TMP_IntegerText.SetText" );
        samplerC.Begin();

        m_text.SetText( num );

        samplerC.End();
    }
}

f:id:baba_s:20190905191140p:plain

注意

ビルド後のアプリケーションでは GC Alloc は発生しないですが、
Unity エディタ上で動作確認する時は GC Alloc が発生します

参考サイト様

https://forum.unity.com/threads/garbage-free-way-of-showing-integers-in-the-ui-using-textmesh-pro.739895/