うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】TextMeshPro DynamicFontを使用する際のgit管理の課題を解決するスクリプト

TextMeshPro DynamicFontを使用する際のgit管理の課題を解決するスクリプト

Unityのテキスト表示において、TextMeshProは広く使用されています。その中でも、DynamicFontを利用する場合、再生中にFontAtlasが変更されると、gitの履歴管理が困難になるという問題があります。この記事では、そんな課題を解決するためのスクリプトを紹介します。

DynamicFontを利用すると、再生中にテキストが動的に変化するため、それに伴いFontAtlasも変更されます。この結果、gitのコミット履歴にはフォント関連の変更が頻繁に含まれることになり、差分の管理が複雑化します。

そこで、以下のスクリプトを利用することで、再生中にFontAtlasをクリアすることができます。これにより、gitの履歴管理がより正確になり、変更の追跡が容易になります。

#if UNITY_EDITOR

using TMPro;
using UnityEditor;
using UnityEngine;

public static class TextMeshProAtlasClear
{
    [InitializeOnLoadMethod]
    private static void Test()
    {
        EditorApplication.playModeStateChanged -= PlayModeStateChanged;
        EditorApplication.playModeStateChanged += PlayModeStateChanged;
    }

    private static void PlayModeStateChanged(PlayModeStateChange state)
    {
        if (state != PlayModeStateChange.ExitingPlayMode)
            return;
        
        var assets = Resources.FindObjectsOfTypeAll<TMP_FontAsset>();
        // Dynamicなアセットのアトラスをクリア
        foreach (var asset in assets)
        {
            if (asset.atlasPopulationMode != AtlasPopulationMode.Dynamic)
                continue;

            asset.ClearFontAssetData(setAtlasSizeToZero: true);
        }
    }
}

#endif

このスクリプトは、Unityのエディタモードでプレイモードが終了する際に実行され、DynamicFontに関連するFontAtlasをクリアします。これにより、再生中のFontAtlasの変更がリセットされ、gitの差分管理が容易になります。

このスクリプトをプロジェクトに組み込むことで、TextMeshPro DynamicFontを使用する際のgit管理の課題を解決し、スムーズな開発作業をサポートします。