【Unity】对Unity引用三方字体的踩坑日志
一、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 手册
【Unity】对Unity引用三方字体的踩坑日志相关推荐
- android 字体文件压缩,Android 字体使用踩坑指南
Android 字体使用踩坑指南 最近项目改版,根据ui的设计,需要使用到三字体.在使用过程中遇到一些坑,于是有了这个避坑指南! 字体压缩 第一个坑!字体库的体积太大. 字体压缩的前提是要使用的内容是 ...
- 小程序踩坑日志(一)
微信小程序踩坑日志 起步 申请账号 查看AppID-"设置"-开发设置 小程序的appid相当于小程序平台的一个身份验证 安装开发者工具https://mp.weixin.qq.c ...
- 数据挖掘实战(3)——时间序列预测ARIMA模型(附踩坑日志)
文章目录 1 导包 2 数据准备 3 可视化 4 构建ARIMA模型 5 预测 6 踩坑日志 1 导包 import numpy as np import matplotlib.pyplot as p ...
- opensuse 装机踩坑日志
前提:上次自己制作的centos服务器因为各种原因导致定时任务无法正常运转,另外centos自身的问题,想着趁着这次机会换一个稳如老狗的系统,从debian和opensuse中最终选择了opensus ...
- 踩坑日志1----从zuulFilter到Filter
踩坑缘起: 项目里面一直在线程的上下文里面放着一些用户的信息,之前测试的时候直接放在了接口的最前面,这次有时间把中间的逻辑终于捋清楚了,涉及到了SpringCloud的zuul以及filter,把这中 ...
- Unity 射线与碰撞范围检测【踩坑记录】
射线检测 射线检测在2D和3D的区别比较大 一定要加上对应的Collider组件 对应的函数只检测对应的Collider,Physics.Raycast是不会检测到Collider 2D的(这个让我有 ...
- Unity Spine 3.8 (URP) 踩坑(Shader报错修改)
今天搜索spine优化,看到一篇文章项目导入多个Spine动画 合批 降低DrawCall -- UWA问答 | 游戏开发者互动问答社区 | 侑虎科技 提供了新思路,打算尝试一下URP.但美术使用的s ...
- html移动端最小字体大小,踩坑之移动端显示字体大小问题
踩到的第一个坑: 最近做一个移动端的h5,一开始拿到设计稿后,发现有几个区域字体换算之后在iphone6上是小于12px的,就有一个问题了,谷歌对小于12px的字体,是不做处理的.按理说,设计上应该要 ...
- html5 移动端字体问题,踩坑之移动端显示字体大小问题
踩到的第一个坑: 最近做一个移动端的h5,一开始拿到设计稿后,发现有几个区域字体换算之后在iphone6上是小于12px的,就有一个问题了,谷歌对小于12px的字体,是不做处理的.按理说,设计上应该要 ...
最新文章
- AI一分钟 | 富士康押宝人工智能,将投资21亿元用于AI研发
- PHP计划任务:如何使用Linux的Crontab执行PHP脚本
- 宝塔控制面板创建ftp后链接不上的解决方法
- 获取固件加载基地址的几种方法
- 对话推荐系统_RSPapers | 对话推荐系统论文合集
- 剑指-利用树的前序遍历和中序遍历结果,输出树的原始结构
- python文件读取写入实践_python文件写入实例分析
- 前置交换机数据交换_我们的数据科学交换所
- 架构日趋复杂的今天,如何重构数据库和应用边界?
- 决策树算法学习笔记(提升篇)
- python常用模块-time和datatime
- 操作系统(5)-进程调度算法
- .NET : 在定义项目模板的时候使用占位符
- Activities
- centos安装wget_宝塔是干什么的?3分钟教会你云服务器上安装宝塔面板
- 有趣 的java代码_[分享]几段有趣的JAVA代码
- 重温归一化(MinMaxScaler)和标准化(StandardScaler)
- 远程GPU服务器运行Python
- lammps教程:实例讲解npt、nvt系综的选择
- uni-app写微信小程序获取位置信息