Unity TextMeshPro的字体消失的问题

第一次遇见以为是个bug,既然我纠结了一段时间,那么我相信还会有其他人会碰到。


首先这里默认你已经创建好了一个字体。

如图,左边是创建好的字体。右边是原字体。

如果不知道怎么创建的话,快速创建步骤,右键原字体-> Create->TextMeshPro->FontAsste。

一般来讲这是第一次使用TextMeshPro导入中文字体使用的正常步骤。

————————————————————————————

选中你的字体看一下它的设置,注意这个地方,动态

这也是默认的字体设置,如果不明白这个动态是什么意思的话,展开那个箭头。

 这个黑色的贴图是把你字体第一次挂在Text上生成的,它是一个画布,下一步你就知道这有什么用了。

 这个时候,在Text上输入了第一个汉字,回头再看下上边的贴图。

你会发现你打的字被印上去了。

关键点就出现了。

这种动态字体在你输入没记录过的字体时,会把它印在这个图上。

那么问题来了,不妨设想一下,这个图满了会怎么样,就像这样 。

 没错,字体不会出现了,因为已经放满了,然后你打的字只要在这个画布上没有,那么就不会显示出来。

就会出现这种bug。

 左边缺少的字就是因为那是画布上不存在的字,却有没有地方把它印上去了,于是就GG了。

那么如何解决呢。


1,创建静态字体。

动态字体是使用时创建,静态字体是一开始就创建好,用的时候直接拿就行了。

Window->TextMeshPro->FontAssteCreator打开这个面板。

这两个地方决定了你的画布能放多少字,可以权衡一下。

这样生成的画布是64M,虽然字很多但...自己斟酌吧。

生成字体,保存字体,然后用起来就行了。

2,扩大画布

如果不这样做,还可以直接在你已经到上限的字体上直接更改设置。

3,勾选多图集纹理


其实当你知道事情是怎么发生的时候就已经知道怎么解决了,一开始我就很迷,不知道问题如何产生的,以为无脑用就行了。

造孽。

### Unity WebGL 中文字体显示解决方案 #### 字体设置问题分析 在Unity发布WebGL时,中文无法正常显示的主要原因在于字体配置当。默认情况下,Unity使用的字体是Arial[^1]。然而,当涉及到中文字体支持时,Arial并包含完整的汉字字符集。 #### 动态字体处理方法 对于动态字体而言,如果输入的文字在当前字体的编码范围内,则会尝试从系统默认字体库中寻找对应的字符。但在WebGL环境下,由于浏览器环境同于本地操作系统,这种机制可能失效,从而导致部分或全部中文字符无法正确渲染[^2]。 #### 使用TextMeshPro解决办法 为了确保WebGL项目中的中文字体能够被正确加载并显示,推荐使用TextMesh Pro组件及其附带的Font Asset Creator工具来创建自定义字体资源文件。通过`Window > Text > Font Asset Creator`菜单选项可以方便地完成这一过程[^3]。 ```csharp using TMPro; // 创建TMP_FontAsset对象实例化所需字体 public TMP_FontAsset customChineseFont; void Start() { // 将UI元素上的文本组件替换为TextMeshProUGUI,并指定新字体资产 var textComponent = GetComponent<TMP_Text>(); textComponent.font = customChineseFont; } ``` #### 预先嵌入字体资源 为了避免因网络延迟或其他因素造成的字体缺失情况发生,在打包前应尽可能预先将所需的整个字形数据包嵌入到工程内。这样仅可以提高首次加载速度,还能有效防止在线获取失败的情况出现。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值