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
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。


目录
相关文章
|
C# 图形学
unity使用BMFont制作位图字体
unity也能制作艺术字拉
unity使用BMFont制作位图字体
|
图形学 Android开发
Unity从学习到赚钱系列-聊天气泡及字体模糊
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
344 0
|
vr&ar 图形学
【Unity3D 灵巧小知识点】☀️ | Unity控制台 输出打印不同颜色的字体
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
【Unity3D 灵巧小知识点】☀️ | Unity控制台 输出打印不同颜色的字体
|
图形学 设计模式 容器
[Unity 设计模式]IOC依赖倒置
1.前言 最近在看《游戏开发与设计模式》一书,看到控制反转设计模式,作者说:上层模块不应该依赖于下层模块,上层模块和下层模块都应该依赖于接口,这样能减少耦合。然后附带举了个例子,我觉得特别好,就是一台计算机是属于上层模块,里面硬盘属于下层模块,计算机依赖于硬盘,硬盘是计算机的基本组成部件之一。
1389 0
|
3月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
183 6
|
2月前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
112 4
|
3月前
|
图形学 缓存 算法
掌握这五大绝招,让您的Unity游戏瞬间加载完毕,从此告别漫长等待,大幅提升玩家首次体验的满意度与留存率!
【8月更文挑战第31天】游戏的加载时间是影响玩家初次体验的关键因素,特别是在移动设备上。本文介绍了几种常见的Unity游戏加载优化方法,包括资源的预加载与异步加载、使用AssetBundles管理动态资源、纹理和模型优化、合理利用缓存系统以及脚本优化。通过具体示例代码展示了如何实现异步加载场景,并提出了针对不同资源的优化策略。综合运用这些技术可以显著缩短加载时间,提升玩家满意度。
179 5