您的位置:首页 > 房产 > 建筑 > Unity项目增加字体裁剪

Unity项目增加字体裁剪

2025/1/7 23:57:36 来源:https://blog.csdn.net/xiyouice/article/details/141611427  浏览:    关键词:Unity项目增加字体裁剪

因为项目里有字体裁剪缩小字体文件的需求,在网上搜索了一番。
有个很靠谱的参考文章:
https://www.cnblogs.com/yaukey/p/compare_fontsubsetgui_fontpruner_for_unity.html
然后就使用了这篇文章里提到的FontPruner工具。
下载之后就是文章置顶附件这样的jar包,放入工程里。

需要编写脚本,根据表格工具导出的项目文本对应字体的txt文件,再使用裁剪工具进行裁剪。

private static void ExecuteFontPruner(string fontName){UnityEngine.Debug.Log($"[FontCreateTool]:开始重新生成 [{fontName}] 字体");var txtPath = $"{fontToolPath}/{fontName}.txt";var fontFullPath = Application.dataPath + $"{fontOriginResPath}/{fontName}.ttf";fontFullPath = fontFullPath.Replace("Assets/", "");var newFontPath = $"{resourcePath}/{fontName}.bytes";if (!File.Exists(txtPath)){UnityEngine.Debug.LogError($"[FontCreateTool]:{txtPath} 路径不存在");return;}if (!File.Exists(fontFullPath)){UnityEngine.Debug.LogError($"[FontCreateTool]:{fontFullPath} 路径不存在");return;}var workingPath = GetFullPath(fontPrunerPath);var fileName = "java";//java -jar sfnttool.jar -s '需要提取的字体' 源字体库 导出的最终字体库var commandLine = " -jar bin/sfnttool.jar -c " +GetFullPath(txtPath) + " " +fontFullPath + " " +GetFullPath(newFontPath);UnityEngine.Debug.Log($"[FontCreateTool]:[FontPruner-DoProcess]commandLine: {commandLine}");Process process = Process.Start(new ProcessStartInfo(fileName, commandLine){RedirectStandardError = true,RedirectStandardOutput = true,UseShellExecute = false,CreateNoWindow = true,WorkingDirectory = workingPath,// http://stackoverflow.com/questions/16803748/how-to-decode-cmd-output-correctly// Default = 65533, ASCII = ?, Unicode = nothing works at all, UTF-8 = 65533, UTF-7 = 242 = WORKS!, UTF-32 = nothing works at allStandardOutputEncoding = Encoding.GetEncoding(850)});if (!process.WaitForExit(timeOut)){UnityEngine.Debug.LogWarning("[FontCreateTool]: FontPruner took too long to finish.  Killing operation.");process.Kill();}string error = process.StandardError.ReadToEnd();if (!string.IsNullOrEmpty(error)){UnityEngine.Debug.LogError(error);}string output = process.StandardOutput.ReadToEnd();if (!string.IsNullOrEmpty(output)){UnityEngine.Debug.Log(output);}AssetDatabase.Refresh();UnityEngine.Debug.Log("[FontCreateTool]:字体裁剪完成");}

实际使用中,有些字体在裁剪的过程中会碰到报错:

Exception in thread “main” java.lang.IndexOutOfBoundsException: Index attempted to be read from is out of bounds: a34c

实际发现是因为字体库里有很多没定义的字形,使用FontCreator工具编辑ttf,把没用的全删除掉之后再调用裁剪就不报错了。

再附一个【FontCreator注册码】网站,毕竟我找了半天……之前免费用一段时间就卸注册表,太麻烦了。
https://www.huajclub.com/8068.html

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com