SerializedFontData GetOrCreateSerializedFont(string name, string path)
        {
            var fullPath = Path.Combine(path, name + ".asset");

            if (File.Exists(fullPath))
            {
                return(AssetDatabase.LoadAssetAtPath <SerializedFontData>(fullPath));
            }
            else
            {
                Directory.CreateDirectory(path);
                var data = SerializedFontData.CreateInstance <SerializedFontData>();
                AssetDatabase.CreateAsset(data, fullPath);
                return(data);
            }
        }
        void ConvertTMProToFontData(TMP_FontAsset tmp, SerializedFontData result)
        {
            result.Material = tmp.material;

            result.CharacterLookupTable = BuildCharacterLookup(tmp.characterLookupTable);
            result.GlyphLookupTable     = BuildGlyphInfos(tmp.glyphLookupTable);
            var featureTableType  = typeof(TMP_FontFeatureTable);
            var field             = featureTableType.GetField("m_GlyphPairAdjustmentRecords", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
            var featureTable      = tmp.fontFeatureTable;
            var kerningSourceData = field.GetValue(featureTable) as List <TMP_GlyphPairAdjustmentRecord>;

            result.Kerning     = BuildKerningInfo(kerningSourceData);
            result.AtlasWidth  = tmp.atlasWidth;
            result.AtlasHeight = tmp.atlasHeight;
            result.PointSize   = tmp.faceInfo.pointSize;
            result.Scale       = tmp.faceInfo.scale;
        }