Hello.
I have an annoying bug. Unity 2121.1.28, TMP Package 3.0.6
The project has a TMP Default Resources Liberation Sans font SDF asset. After random changes in the scene, he updated and marked it as dirty in GIT and I rollback him all time
After committing the updated version and rand time I have updated the version again but with other values
Changes to dynamic font assets are persistent in the Editor and between editor sessions unless you enable Clear Dynamic Data on Build on dynamic font assets. Although the option is named Clear Dynamic Data on Build, it also clears the data when closing the editor.
P.S. I believe clearing the data upon closing the editor might be in the preview release of version 3.2.0 which would be 3.2.0-pre.2.
This does not fix my issue with GIT. I do not close Unity before pulling or pushing commits.
One variant it’s separate dynamic and static data. Maybe you can move dynamic data to UserSettings or Library folder in future releases?
Also, we speak about this issue in the Unity Russian telegram community, and many people are frustrated about this Font Dynamic Data.
UPDATE: Fallback font not alone now. He has a friend FirstTimeWriting-xRRMO SDF.asset.
They together spam in git. Restoring the previous state or committing new modifications does not help.
FirstTimeWriting SDF created by Right Click on font → Create → TextMeshPro → FontAsset->SDF
Hi. Thanks for your help. That works.
I also write a tool to clear already “dirty” selected fonts.
UPDATE: After this manipulation Liberation Sans SDF (Default TMP Font) as 3D text are randomly begin glitch or not show. Restart editor help
[MenuItem("Tools/General/" + nameof(ClearSelectedFontsDynamicData))]
private static void ClearSelectedFontsDynamicData()
{
var selected = Selection.activeObject;
var path = AssetDatabase.GetAssetPath(selected);
// Loading the asset only when we sure it is a font asset
var fontAsset = AssetDatabase.LoadMainAssetAtPath(path) as TMP_FontAsset;
// Theoretically this case is not possible due to asset type check above, but to be on the safe side check for null
if (fontAsset == null)
return;
if (fontAsset.atlasPopulationMode != AtlasPopulationMode.Dynamic)
return;
Debug.Log("Clearing font asset data at " + path);
fontAsset.ClearFontAssetData(setAtlasSizeToZero: true);
}