一、问题描述
两个没有相关性的字体,在Unity里导入的时候,会产生依赖关系。
二、问题复现
研发团队做了一个测试Demo,导入了两个字体“PKCommonFont.ttf”和“Normal.ttf”。并在测试之前确认过这两个字体资源,无论是从字体本身,还是Unity里面的Font Name等地方,都没有看到相关性,但是却能通过AssetDatabase.GetDependencies(ttfPath)方法找到两者之间的依赖关系。在实际加载的时候,加载PKCommonFont时,也会加载Normal字体。
三、问题分析
在我们研究该问题的过程中,我们慢慢发现,当字体为Dynamic类型时,其会根据Font Names建立关联,此处的Font Names不是指字体文件的文件名,而是指字体内部名(TrueTypeFontImporter.fontTTFName)。示例中的 “Normal” 和 “PKCommonFont” 都只是文件名,而其字体内部名都是“Source Han Sans CN”;而当出现相同字体内部名的字体文件时,Editor会自动在其之间建立关联(后出现在project中的字体会关联先出现的字体)。这也就是为什么示例中两个完全不同字体会产生关联的原因。同时,为了验证这一问题,我们也尝试将两个字体的FontName进行修改,让其不再相同,果然,这两种字体的依赖关系就消失了。
四、解决方案
1、较为合理的解除关联的方法:
重命名字体内部名,使获取的TrueTypeFontImporter.fontTTFName不相同即可。
2、较为方便的解除关联的方法:
修改ttf对应的meta文件,将其中的fallbackFontReferences:[]修改为
以下是测试过程:
方法一:用FontCreator修改FontName
使用了FontCreator(9.1)修改FontName,步骤如下:
1)用FontCreator打开PKCommonFont.ttf文件后,通过【字体】【属性】打开属性面板。
2)切换到【扩展】页签,修改【字体族】为“PKCommonFont”。
3)导出:【文件】【导出字体为】选择TrueType字体,字体名称选择【版本重新生成】,导出PKCommonFont2.ttf。
下图为修改前后两个字体的meta文件对比,左为修改前,右为修改后。
下图为修改后的运行结果,可以看到PKCommonFont2.ttf不再依赖Normal.ttf。
方法二:修改有依赖问题的ttf的meta文件
下图为meta文件的修改前后对比,左为修改后,右为修改前。
下图为修改后的运行结果,可以看到PKCommonFont.ttf不再依赖Normal.ttf。
五、结论
当明确Unity使用的是字体资源的内部名后,字体间产生关联的原因也就水落石出。该问题的困惑源自字体资源文件名与字体内部名不一致,因而建议研发团队在为字体资源文件命名时尽量与字体内部名称一一对应,来避免在使用过程中受到文件名干扰。
至此,该问题已经得到了解决。该问题来自于问答社区:https://answer.uwa4d.com/question/5a697bf17daacf4c7ff04928,如您对该问题仍有疑问,可以转至社区进行进一步交流。
原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。