Unity的Webgl端文字不显示

Unity中默认使用字体是Arial字体,该字体是支持英文,其他语言文字都不支持的。

那么问题来了,如果该字体不支持中文字体,我们发布的所有平台的包,为什么PC和移动端的时候中文或者其他语言的文字能正常显示呢?

这是因为程序运行的时候当碰到不能识别的问题时,会自动的去从你设备系统中查找所拥有的字体中进行匹配,当有字体能匹配上,就会使用该系统字体进行显示。

但是这个方式在Webgl上就执行不通,个人猜测应该是Web浏览器没有权限自动去获取系统文件的原因。

接着开始说怎么解决,以及一些问题。
不显示中文字体,表现为所有不显示的地方都会有方框表示,要正常显示就需要找个字体文件,放入到工程,替换掉默认的Arial字体,就能正常显示了。
在这里插入图片描述

如果项目是商用的,需要注意的是大部分字体是有版权问题的,如果要商用最好购买字体,个人知道的思源字体大部分都没版权,是免费开放的,可以直接使用。

字体设置好后,发布Webgl时把字体一起发布就能正常显示中文了
那么问题又来了,当碰到文字输入框时,输入有问题怎么弄,一样的在Webgl端InputField的适配不是很好,只有输入英文字母时是正常的。

当输入其他语言文字时,就会出现很多问题。这里介绍一个插件WebGLInput,这个插件解决Webgl端输入的问题,大概原理是他生成了对应Web层的输入框,并且隐藏,所有输入会调用这个输入框,再把这个输入框的内容,同步到Unity层的InputField。(并且支持TMP的文字输入)

在这里插入图片描述

插件导入后,在所有的InputField对象上添加上WebGLInput脚本即可,也可以通过代码找到场景中所有的InputField动态绑定。

在这里插入图片描述

正常来说,到这里就已经解决了Webgl不显示中文等问题了。但是实际应用过程中,你会发现使用Text组件显示的时不时出现一些文字丢失,不显示的问题。还是随机的(至少我还没找到规律)我去网上查资料并没找到这方面的问题。唯一找到过一篇,说的还是字体问题,讲的是我们自己去第三方网站下载的字体,可能字体文件有问题,会经常出现缺字的问题。如下图,有些文字就是会缺失,当你重复去关闭UI再重新打开,又可能会出现,或者缺失的文字变了。以找的那篇文章内容说需要用系统自带的字体,这个系统的字体文件没有问题,就不会再出现这个现象了
在这里插入图片描述

我就按照这个又替换了系统的字体,发现一开始的确好了很多,实际上是出现的几率变小了,但使用久了,换了不同设备,不通浏览器,一样又出现这个问题了。因此测试下来,根本不是这个原因。

又因为没有查到相关的资料,就只能自己去反复测试,去验证自己的推测,例如:一开始我还以为是显示范围有问题,或者动态设置的显示内容有问题,以及刷新机制的问题,导致刷新不即使导致的。

因此对应测试的我把显示范围适配屏幕大小,发现没有用,有去打印了日志要显示的内容,发现日志中打印的,就是正常的,最后又去测试刷新机制问题(因为缺失的文字,多刷新几遍后,又会出现),我把每次设置完显示的内容后,去强制刷新一遍,两遍,三遍,发现还是一样,会有这个问题。

因此到最后还是没找到原因,不知道是什么机制导致了Text组件显示文字会出现丢失的现象。最后还是改成了TextMeshPro(一开始不用这个,是因为项目最早统一使用的默认的UI组件,如果要更换就是个很大的工程,就想着能不能直接解决这个问题,最后发现是我想多了,连原因都没找到)

所以最后把所有和文字显示相关的,花了大量的时间全部改成了TextMeshPro的,换完之后,只能说至少到现在为止没有再次遇到这个问题,之后会不会遇到,只能等实际使用过程中看看还会不会有了。如果再次碰到,有进一步问题以及解决方案,我会再次更新本篇文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TenderRain。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值