Unity: TextMeshPro生成中文字体(附3.5k,7k,2w常用字集)

免费常用3千5,7千字,2万字中文字体包

1.选择Window/TextMeshPro/Font Asset Creator

注:准备字体:从字体库或其他来源获取中文字体文件,通常为.ttf、.otf或.ttc格式。最简单的方式是从Windows系统文件的Font文件夹里拖一个.ttc文件(C盘 > Windows文件夹 > Fonts 文件夹)。ttf和otf格式好像不支持。需要将字体文件和字库文件复制到Unity项目的Assets文件夹或其子文件夹中。

2.Font Asset Creator设置界面,设置完成后点击Generate Font Atlas

属性讲解

Source Font File(源字体文件):选择用于生成 Text Mesh Pro 字体资源的字体。

Sampling Point Size:设置用于生成字体纹理的字体大小(以磅为单位)。

            Auto Sizing(默认):使用尽可能大的磅值,同时仍然适合纹理上的所有字符。        

            Custom Size:使用自定义磅值,在文本框中输入所需的大小,使用此设置可实现对仅位图字体的像素精确控制。

Padding:指定字体纹理中字符之间的间距(以像素为单位)。填充越大,过渡越平滑,从而允许更高质量的渲染和更大的效果,如粗轮廓。对于512x512 纹理,5 的填充通常很好。

Packing Method:指定如何使字符适合字体纹理。

            Optimum:查找仍然适合纹理中所有字符的最大可能自动字体大小。(最后打包的时候用)

            Fast(默认):更快地计算字符打包,但可能使用比优化模式更小的字体大小。(测试时使用)

Atlas Resolution:设置字体纹理的大小宽度和高度,以像素为单位,512 x 512 的分辨率对于大多数字体来说都很好,只要您只包含 ASCII 字符即可。使用 SDF字体时,更高的分辨率会产生更精细的渐变,从而产生更高质量的文本。

Character Set:选择预定义的字符集:你创建的字体的 字符范围,也就是说你要创建的TextMeshPro字体中,要包含的所有字符。在我们这里就是所有的中文字符。一般来说常见中文字+英文单词+符号即可。

下拉选择Characters from File,然后选择包含所有所需字符的txt文件(需要先导入Unity)。下载地址见文章开头

            ASCII(默认):包括 ASCII 字符集中的可见字符。

            Extended ASCII:包括扩展 ASCII 字符集中的可见字符。

            ASCII Lowercase:仅包含 ASCII 字符集中可见的小写字符。

            ASCII Uppercase:仅包含 ASCII 字符集中可见的大写字符

            Numbers+Sysbols:仅包括来自 ASCII 字符集的可见数字和符号。

            Custom Range:输入一系列十进制值或值范围,以指定要包括的字符。

            Unicode Range(Hex):输入一系列 unicode 十六进制值或值范围,以指定要包含的字符。

            Custom Characters:输入字符序列以指定要包含的字符。

            Characters from File:包括小伙伴们指定的文本资源中的所有字符。

Render Mode:指定输出字体图集时要使用的渲染模式。

            SMOOTH:将图集渲染为抗锯齿位图。

            RASTER:将图集渲染为非抗锯齿位图。

            SMOOTH_HINTED:将图集渲染为抗锯齿位图,并将字符像素与纹理像素对齐以获得更清晰的结果。

            RASTER_HINTED:将图集渲染为非抗锯齿位图,并将字符像素与纹理像素对齐以获得更清晰的结果。

            SDF:使用较慢但更准确的 SDF 生成模式渲染图集,并且没有过采样。

            SDFAA:使用更快但不太准确的 SDF 生成模式渲染图集,它生成的字体图集足以满足大多数情况。

            SDFAA_HINTED:使用更快但不太准确的 SDF 生成模式渲染图集,并将字符像素与纹理像素对齐以获得更清晰的结果,它生成的字体图集足以满足大多数情况。

            SDF8:使用较慢但更准确的 SDF 生成模式和 8 倍过采样渲染图集。

            SDF16:使用更慢但更准确的 SDF 生成模式和 16 倍过采样渲染图集。

            SDF32:使用较慢但更准确的 SDF 生成模式和 32 倍过采样渲染图集。将此设置用于具有复杂或小字符的字体。

Get Kerning Pairs:启用此选项可从字体复制字距调整数据。

Generate Font Atlas:生成字体图集纹理。

3.生成后,如下图

点击Save保存

注:如果Missing characters的数量过多,可更换字体进行尝试

Bug解决

每个字符都有一层白色半透明底纹,这是因为TextMeshPro 使用有向距离场的方式渲染。

解决方案:将Text(TMP)材质的Shader属性设置为Bitmap。
警告1:Unable to add the requested character to font asset [msyhbd SDF]'s atlas texture. Please make the texture [msyhbd SDF Atlas] readable.

解决方案1:在项目面板中选择字体中包含的图集纹理,然后将检查器更改为调试(Debug)模式,勾选Is Readable。

解决方案2:在该字体文件目录下用记事本打开.asset文件,找到m_Isreadable:0,将其修改为1并保存,原理同解决方案1一样

警告2:The character used for Underline is not available in font asset [msyhbd SDF].

解决方案1:在项目面板中找到TextMeshPro文件,选择Resources > TMP Settings,在检视面板勾选Disable warnings,即关掉警告。

解决方案2:警告翻译为:"用于下划线的字符在字体资产 [msyhbd SDF] 中不可用",即无法使用下划线样式,针对此警告,只需在字符集加上下划线字符,重复以上步骤即可。
警告3:"The character with Unicode value \u3002 was not found in the [msyhbd SDF] font asset or any potential fallbacks. It was replaced by Unicode character \u25A1 in text object [Text (TMP)]."

解决方案:警告翻译为:"在 [msyhbd SDF] 字体资源或任何潜在的回退中找不到具有Unicode 值 \u3002 的字符。它在文本对象 [Text (TMP)] 中被 Unicode 字符 \u25A1 取代。"即我们输入了字库文本中没有的字符,解决方案可同警告2解决方案1一样,关掉警告,这样即便我们输入了字库文本中没有的字符,只有Scene界面会出现Unicode 字符 \u25A1 ,而不会出现警告,便于项目调试。

相关推荐
异次元的归来10 小时前
Unity DOTS中的share component
unity·游戏引擎
向宇it13 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎
_oP_i15 小时前
unity webgl部署到iis报错
unity
Go_Accepted15 小时前
Unity全局雾效
unity
向宇it15 小时前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
每日出拳老爷子18 小时前
【图形渲染】【Unity Shader】【Nvidia CG】有用的参考资料链接
unity·游戏引擎·图形渲染
北海651619 小时前
Dots 常用操作
unity
YY-nb1 天前
Unity Apple Vision Pro 开发教程:物体识别跟踪
unity·游戏引擎·apple vision pro
Cool-浩1 天前
Unity 开发Apple Vision Pro物体识别追踪ObjectTracking
unity·ar·apple vision pro·mr·物体识别·vision pro教程·objecttracking
向宇it2 天前
【从零开始入门unity游戏开发之——C#篇23】C#面向对象继承——`as`类型转化和`is`类型检查、向上转型和向下转型、里氏替换原则(LSP)
java·开发语言·unity·c#·游戏引擎·里氏替换原则