Unity中使用小缩放比例Text Mesh时的文字挤压变形问题
解决Unity中TextMesh/文本组件文字挤压扭曲的问题
我之前也碰到过一模一样的情况,尤其是Canvas缩放比例调得很小的时候,文字组件特别容易出现这种挤压变形的问题,给你几个亲测有效的解决办法:
1. 先搞定Canvas的缩放核心设置
Canvas的缩放模式是罪魁祸首的概率极高,尤其是你把整体缩放调得很小的时候:
- 打开Canvas的Inspector面板,找到Canvas Scaler组件
- 把缩放模式改成
Scale With Screen Size - 参考分辨率设成你项目的目标分辨率(比如1920x1080),再根据需求调整Match值(0是优先适配宽度,1是优先适配高度,0.5是居中适配)
- 别乱改Reference Pixels Per Unit,保持默认的100就行,这个值和文字、Sprite的显示逻辑绑定,改了很容易出问题
2. 调整TextMesh的关键参数(针对TextMesh组件)
如果用的是TextMesh,除了Canvas的设置,还要检查这些细节:
- 选中TextMesh对象,在Inspector里找到TextMesh组件
- 把Anchor设成你需要的对齐方式(比如居中),用
Character Size和Line Spacing调整文字大小,别直接缩放GameObject来改尺寸 - 开启Word Wrap,并设置合适的Width值,给文字足够的展开空间
- 检查Font Size,有时候字体设得太小,再叠加Canvas的小缩放,就会导致文字挤压,试着调大字体,再用Canvas缩放控制整体显示大小
3. 别直接缩放文字所在的GameObject
很多人图省事直接缩放文字父物体或文字本身,这是导致挤压的高频操作:
- 确保文字GameObject的Scale是(1,1,1),绝对不要缩放它
- 要调整文字整体大小,要么改TextMesh的
Character Size/UGUI Text的Font Size,要么通过Canvas的缩放来控制,别单独动文字对象的缩放
4. UGUI Text组件的额外检查
如果用的是普通UGUI Text组件,除了Canvas设置,还要注意:
- 把Horizontal Overflow和Vertical Overflow从
Overflow改成Wrap或Ellipsis,让文字在RectTransform范围内合理排列,别强行压缩在太小的区域里 - 调整RectTransform的大小,给文字足够的显示空间,别让文字框本身就挤得离谱
5. 预制体的专属检查
因为你是给预制体加标签,还要排查预制体本身的问题:
- 打开预制体,确认里面的文字组件参数都正常,没有继承父物体的异常缩放
- 把预制体拖到场景测试时,别给预制体的父物体设非(1,1,1)的缩放,否则缩放会传递给文字组件导致挤压
你可以先从Canvas Scaler的设置开始调,我之前就是改了缩放模式后,文字立刻就正常显示了。
内容的提问来源于stack exchange,提问作者Rebekah




