Unity中如何实现不同屏幕尺寸下的UI自适应适配?
问题
我希望游戏中的按钮和UI能够随游戏运行的屏幕尺寸自动调整大小,请问该如何实现这一效果?
以下是我当前Canvas上的配置情况:
回答
要实现UGUI全分辨率自适应,按下面的步骤配置就能覆盖90%以上的使用场景,不需要写复杂的适配逻辑:
1. 调整Canvas Scaler组件参数
你的Canvas上默认挂载了Canvas Scaler组件,按如下规则修改配置:
- 将UI Scale Mode从默认的
Constant Pixel Size切换为Scale With Screen Size - Reference Resolution填写你制作UI时参照的基准分辨率:横屏项目如果是按1920×1080设计就填X=1920、Y=1080,竖屏手游按1080×1920设计就填对应数值
- Screen Match Mode选择
Match Width Or Height,下方Match滑块根据项目类型调整:- 横屏项目拉到0(匹配宽度):所有屏幕下UI宽度始终和参考分辨率一致,上下区域自动适配,不会出现左右裁切
- 竖屏项目拉到1(匹配高度):所有屏幕下UI高度始终和参考分辨率一致,左右区域自动适配,不会出现上下裁切
- 不想留适配黑边就拉到0.5,UI会等比缩放适配当前屏幕宽高
- 新手不要随便选
Expand/Shrink模式,这俩的适配逻辑容易出现UI过大/过小的问题,等摸透适配规则后再按需使用。
2. 给单个UI元素设置对应锚点
只改Canvas Scaler不够,单个UI元素锚点设错依然会错位飘移,按元素的功能位置设置锚点即可:
- 全屏背景、底部操作栏这类需要贴边拉伸的元素:按住Alt键,点锚点预设里的「拉伸铺满父项」选项,锚点会自动对齐父节点四个角,元素会随屏幕尺寸自动拉伸
- 角落固定按钮(比如左上角返回键、右上角设置键):锚点锚到对应角落,比如返回键锚点设为左上角,之后不管屏幕尺寸怎么变,按钮和左上角的相对距离永远固定
- 居中弹窗、主操作按钮:锚点设为屏幕中心,保证永远显示在屏幕中间位置
- 按钮组、信息列表这类排列类UI,别手动拖拽定位,添加
Horizontal Layout Group/Vertical Layout Group/Grid Layout Group组件,让组件自动计算位置排列,适配性远好于手动排布。
补充适配技巧
- 尽量不要给UI元素写死固定宽高,能靠锚点、布局组件撑开尺寸就别写死像素值
- 适配测试直接在编辑器Game视图切换不同分辨率预设,覆盖4:3老屏、16:9常规屏、21:9带鱼屏、移动端不同竖屏比例,看到错位直接调整对应元素的锚点即可
- 如果需要对特殊比例屏幕做字号、位置微调,可以挂个简单脚本在启动时根据当前屏幕宽高比调整,示例代码:
using UnityEngine; using UnityEngine.UI; public class UISizeAdapter : MonoBehaviour { private void Start() { // 以1920*1080的基准分辨率为例 float standardAspect = 1920f / 1080f; float currentAspect = (float)Screen.width / Screen.height; // 超宽屏适当缩小文字字号避免内容溢出 if (currentAspect > standardAspect) { Text targetText = GetComponent<Text>(); if (targetText != null) { targetText.fontSize = Mathf.RoundToInt(targetText.fontSize * standardAspect / currentAspect); } } } }
内容的提问来源于stack exchange,提问作者Jerry
相关产品推荐
相关产品推荐

