【Unity】对Unity引用三方字体的踩坑日志

您所在的位置:网站首页 Unity导入资源包需要注意什么 【Unity】对Unity引用三方字体的踩坑日志

【Unity】对Unity引用三方字体的踩坑日志

2023-09-13 03:29| 来源: 网络整理| 查看: 265

一、Unity导入三方字体 导入字体文件

要在项目中添加字体,必须将字体文件放在 Assets 文件夹中。然后,Unity 会自动将其导入。支持的字体格式为 TrueType 字体(.ttf 文件)和 OpenType 字体(.otf 文件)。

二、踩坑和填坑

在实际使用中我们发现字体文件导入后References to other fonts in project 内有一堆不知所谓的引用内容。如下图:

而这些内容有时候会导致一些奇怪的报错(因为项目做了资源分包方案)。

然后本人开始查阅Unity官方API,然后从API中得知Unity动态字体设置:

动态字体

在 Import Settings 中将 Characters 下拉选单设置为 Dynamic 时,Unity 将不会预先生成包含所有字体字符的纹理。取而代之的做法是,它将使用 FreeType 字体渲染引擎来即时创建纹理。这样做的好处是它可以节省下载流量和纹理内存,特别是使用通常包含在用户系统中的字体时(这种情况下不必包含字体数据),或者需要支持亚洲语言或大型字体大小时(这种情况下使用普通字体纹理可能使字体纹理非常大)。

当 Unity 尝试使用动态字体渲染文本但无法找到字体时(因为未选择 Include Font Data__,并且用户计算机上未安装该字体),或者字体不包含请求的字形时(例如尝试使用拉丁字体在东亚脚本中渲染文本时,或者使用粗体/斜体字形文本时),它将尝试 Font Names__ 字段中列出的每种字体,从而查看是否可以找到与项目中的字体名称匹配的字体(包含字体数据)或者用户计算机上安装的字体是否具有请求的字形。如果找不到列出的后备字体或者这些字体不具有所请求的字形,Unity 将回退到硬编码的全局后备字体列表,其中包含当前运行时平台上通常安装的各种国际字体。

请注意,有些目标平台(WebGL 和有些游戏主机)没有可供 Unity 访问以渲染文本的操作系统默认字体。对于这些平台,将忽略 Include Font Data 设置,并会始终包含字体数据。所有要用作后备字体的字体都必须包含在项目中,因此如果需要渲染国际文本或是字体的粗体/斜体版本,则需要在项目中添加一个具有所需字符的字体文件,并在其他字体的 Font Names 列表中设置该字体,这样应该就会将该字体用作后备字体。如果字体设置正确,则后备字体将在字体导入器 (Font Importer) 检视面板中列出,显示在 References to other fonts in project 下。

此时由上图可以看出Font Names中并没有那么多字体引用但是下面的引用项中会有很多引用。此时,我陷入了短暂的迷茫:“这怎么和说好的不一样?”。第一反应是是不是Unity的版本BUG,因为本人项目之前升级过Unity版本,所以我打开之前的项目查看一下,结果发现问题是一样的。所以我觉得应该换一个思路想一想问题。

于是经过直接对比字体文件发现如上几个字体文件实际上是同一个字体文件改成不同名字导入到Unity内部引发的内部引用问题(这里该打死导入字体的人)。把异常(命名错误)的字体库删除然后Reset并且Apply一下,重新打包引用恢复正常。

三、总结下内容

在Unity引用三方字体库(.ttf|.otf)时,如果存在多个字库文件引用相同名字字体库时Unity内部维护他们的引用关系(使用AssetDatabase.GetDependencies方法可以验证该内容),并且在References to other fonts in project中会有显示。如果没有同名字体库,则如果在Font Names中添加正确的已导入字体库名字时References to other fonts in project中会有显示该内容并且会在meta文件的fallbackFontReferences引用中存在该内容以及字库meta文件的guid。

引用的官方API地址:字体 - Unity 手册



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3