
Unity中Text 无法输入中文解决方法(附中文字体资源包)
在完成整个登录界面的开发后,呈现出的是一个简洁且功能完备的用户登录入口。界面的背景图片居中且适配不同屏幕尺寸,给人以舒适的视觉感受。用户名和密码输入框清晰明了,输入框内的提示词以合适的字体样式显示,引导用户正确输入信息。密码输入框中的内容会被隐藏,确保用户信息的安全性。
2.利用现有字体资源添加中文字符(资源包我直接放下面的,下载导入项目直接用即可)
一、问题呈现
在 Unity 项目开发过程中,不少开发者遭遇了输入中文变成方格的困扰。就像下面这条错误提示所反映的情况:
The character with Unicode value \u554A was not found in the [LiberationSans SDF] font asset or any potential fallbacks. It was replaced by Unicode character \u25A1 in text object [ErrorTips].
UnityEngine.Debug:LogWarning (object,UnityEngine.Object)
TMPro.TextMeshProUGUI:SetArraySizes (TMPro.TMP_Text/UnicodeChar[]) (at ./Library/PackageCache/com.unity.textmeshpro@3.0.7/Scripts/Runtime/TMPro_UGUI_Private.cs:1274)
TMPro.TMP_Text:ParseInputText () (at ./Library/PackageCache/com.unity.textmeshpro@3.0.7/Scripts/Runtime/TMP_Text.cs:1902)
TMPro.TMP_Text:GetPreferredHeight () (at ./Library/PackageCache/com.unity.textmeshpro@3.0.7/Scripts/Runtime/TMP_Text.cs:3813)
TMPro.TMP_Text:get_preferredHeight () (at ./Library/PackageCache/com.unity.textmeshpro@3.0.7/Scripts/Runtime/TMP_Text.cs:1392)
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
这条信息清晰地表明,Unicode 值为\u554A(对应汉字 “啊”)的字符,在当前使用的[LiberationSans SDF]字体资源及其可能的备用字体中均未找到,因此在名为[ErrorTips]的文本对象中,该中文字符被替换成了 Unicode 字符\u25A1(一个实心方块)。这一现象严重影响了游戏或应用中涉及中文显示部分的用户体验。
二、原因剖析
出现此类问题的根本原因在于,所选的字体资源并不包含项目中需要显示的中文字符集。在 Unity 中,当文本组件尝试渲染某个字符时,如果该字符在指定字体及其备用字体中均不存在,就会采用默认的替换字符,也就是我们看到的方格。在上述案例中,[LiberationSans SDF]字体本身可能主要针对英文字符或特定字符集设计,并未涵盖中文字符。
三、解决方案
1.更换字体资源
(1)寻找合适字体:可以从系统字体文件夹获取常见的中文字体,如 Windows 系统下的C:\Windows\Fonts目录,其中包含了像 “宋体”“黑体”“微软雅黑” 等多种字体文件(格式通常为.ttf或.otf);Mac 系统的字体文件夹路径为/Library/Fonts等相关位置。此外,也可从正规字体下载网站搜索免费可商用的中文字体。
(2)导入项目:将获取到的字体文件导入到 Unity 项目中。在 Unity 的 Project 面板中,右键点击目标文件夹(建议创建一个专门存放字体的文件夹,如 “Fonts”),选择 “Import New Asset”,然后在弹出的文件选择对话框中选中字体文件并导入。
(3)应用字体:在 Hierarchy 面板中找到显示中文异常的文本对象(如ErrorTips),选中它后,在 Inspector 面板里找到TextMeshPro - Text组件(若为普通 Text 组件则找到Text组件)。点击Font Asset(对于 TextMeshPro 组件)或Font(对于普通 Text 组件)属性右侧的小圆圈,从弹出的字体选择列表中选择刚导入的包含中文字符的字体资源。重新运行项目,查看中文是否能正常显示。
2.利用现有字体资源添加中文字符(资源包我直接放下面的,下载导入项目直接用即可)
(1)打开字体编辑窗口:选中现有的字体资源文件(如下面分享网盘中的YJS.asset),在 Inspector 面板中点击Edit Font Asset按钮,打开Font Asset Creator窗口。
(2)添加中文字符范围:在Font Asset Creator窗口的Characters部分,点击Add Range按钮。在弹出的Add Character Range窗口中,根据项目需求选择Chinese (Simplified)(简体中文)或Chinese (Traditional)(繁体中文),点击OK按钮,即可将相应的中文字符范围添加到字体资源中。
(3)重新生成字体图集:完成字符添加后,点击Generate Font Atlas按钮,让 Unity 重新生成包含中文字符的字体图集。
(4)应用更新后的字体:关闭Font Asset Creator窗口,回到 Unity 主界面。确保显示中文的文本对象(如ErrorTips)使用的是这个更新后的字体资源,再次运行项目,检查中文显示情况。
3.设置备用字体
(1)选择文本对象:在 Hierarchy 面板中选中出现中文显示问题的文本对象,如ErrorTips。
(2)配置备用字体:在 Inspector 面板的TextMeshPro - Text组件下,找到Fallback Settings部分。点击Add Fallback按钮,添加一个包含中文字符的备用字体资源。同样,可以导入系统中的中文字体资源文件,然后在此处指定它作为备用字体。若添加了多个备用字体,需调整它们的优先级,将包含中文字符的字体排在靠前位置。
(3)验证效果:重新运行项目,此时当主字体资源中没有所需中文字符时,Unity 会尝试从备用字体中查找并显示,以此解决中文显示为方格的问题。
四、字体资源分享
为了方便大家解决该问题,这里提供一个字体资源(YJS.asset),可通过以下链接获取:
链接: https://pan.baidu.com/s/1_4YzXar2bjdF75qq9rtUkg?pwd=1209
提取码: 1209
该字体资源或许能够为部分项目解决中文显示问题提供帮助,但请确保在使用时遵循相关的版权规定。若此字体不符合项目需求,仍可按照上述方法寻找更合适的字体资源。希望通过这些解决方案,大家能够顺利解决 Unity 中中文显示异常的问题,提升项目的用户体验。
更多推荐
所有评论(0)