public void OnPreprocessBuild(BuildReport report)
        {
            // Find all font assets in the project
            string searchPattern = "t:FontAsset";

            string[] fontAssetGUIDs = AssetDatabase.FindAssets(searchPattern);

            for (int i = 0; i < fontAssetGUIDs.Length; i++)
            {
                string assetPath = AssetDatabase.GUIDToAssetPath(fontAssetGUIDs[i]);

                // Exclude assets not located in the project.
                if (!assetPath.StartsWith("Assets/", System.StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                FontAsset fontAsset = AssetDatabase.LoadAssetAtPath <FontAsset>(assetPath);

                if (fontAsset != null && (fontAsset.atlasPopulationMode == AtlasPopulationMode.Dynamic || fontAsset.atlasPopulationMode == AtlasPopulationMode.DynamicOS) && fontAsset.clearDynamicDataOnBuild && fontAsset.atlasTexture.width != 0)
                {
                    fontAsset.ClearFontAssetDataInternal();
                }
            }
        }
        internal static void InitializeFontAssetResourceChangeCallBacks()
        {
            FontAsset.RegisterResourceForUpdate   += TextEditorResourceManager.RegisterResourceForUpdate;
            FontAsset.RegisterResourceForReimport += TextEditorResourceManager.RegisterResourceForReimport;
            FontAsset.OnFontAssetTextureChanged   += TextEditorResourceManager.AddTextureToAsset;
            FontAsset.SetAtlasTextureIsReadable   += FontEngineEditorUtilities.SetAtlasTextureIsReadable;
            FontAsset.GetSourceFontRef            += TextEditorResourceManager.GetSourceFontRef;
            FontAsset.SetSourceFontGUID           += TextEditorResourceManager.SetSourceFontGUID;

            // Callback to handle clearing dynamic font asset data when closing the Editor
            EditorApplication.quitting += () =>
            {
                // Find all font assets in the project
                string   searchPattern  = "t:FontAsset";
                string[] fontAssetGUIDs = AssetDatabase.FindAssets(searchPattern);

                for (int i = 0; i < fontAssetGUIDs.Length; i++)
                {
                    string    fontAssetPath = AssetDatabase.GUIDToAssetPath(fontAssetGUIDs[i]);
                    FontAsset fontAsset     = AssetDatabase.LoadAssetAtPath <FontAsset>(fontAssetPath);

                    if (fontAsset != null && (fontAsset.atlasPopulationMode == AtlasPopulationMode.Dynamic || fontAsset.atlasPopulationMode == AtlasPopulationMode.DynamicOS) && fontAsset.clearDynamicDataOnBuild && fontAsset.atlasTexture.width != 0)
                    {
                        fontAsset.ClearFontAssetDataInternal();
                    }
                }
            };
        }