Unity中字体名对依赖关系的影响

简介:

一、问题描述

两个没有相关性的字体,在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
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。


目录
相关文章
|
12天前
|
图形学 开发者
Unity Text字体颜色渐变
此代码实现文本颜色的垂直渐变效果。通过定义起始和结束颜色,获取像素位置信息(UV坐标),根据渐变方向计算颜色插值,并应用到每个像素上。具体步骤包括:1) 定义颜色范围;2) 获取UV坐标;3) 计算线性插值;4) 应用颜色。脚本挂载在Text组件上,可调节顶部和底部颜色实现渐变效果。
|
C# 图形学
unity使用BMFont制作位图字体
unity也能制作艺术字拉
unity使用BMFont制作位图字体
|
图形学 Android开发
Unity从学习到赚钱系列-聊天气泡及字体模糊
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
366 0
|
vr&ar 图形学
【Unity3D 灵巧小知识点】☀️ | Unity控制台 输出打印不同颜色的字体
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
【Unity3D 灵巧小知识点】☀️ | Unity控制台 输出打印不同颜色的字体
|
图形学
Unity 便捷小工具之批量更改UGUI Font(字体)
在项目开发过程中可能会遇到更改字体的需求,如果手动逐一更改实在是太麻烦,所以我们需要自动化,一键能解决的问题绝不点击两次 效果过下 源码如下 using UnityEngine; using System.
2315 0
|
图形学 设计模式 容器
[Unity 设计模式]IOC依赖倒置
1.前言 最近在看《游戏开发与设计模式》一书,看到控制反转设计模式,作者说:上层模块不应该依赖于下层模块,上层模块和下层模块都应该依赖于接口,这样能减少耦合。然后附带举了个例子,我觉得特别好,就是一台计算机是属于上层模块,里面硬盘属于下层模块,计算机依赖于硬盘,硬盘是计算机的基本组成部件之一。
1408 0
|
索引
unity3dUGUI的Text实现字体间距的调整
将脚本TextSpacing 直接挂在到Text组件上,然后调整数值即可 using UnityEngine; using System.Collections; using UnityEngine.
2425 0