Unity 2D设备旋转时按钮变大,横竖屏切换如何正确控制按钮尺寸?
Unity 2D横竖屏切换按钮尺寸适配解决方案
方案1:调整Canvas Scaler参数(优先选择,无需代码)
选中场景中根Canvas对象,修改Inspector面板中Canvas Scaler组件配置:
- UI缩放模式(UI Scale Mode)选择根据屏幕尺寸缩放(Scale With Screen Size)
- 参考分辨率填写你开发竖屏版本时的基准分辨率,本场景直接填写
1440 * 2960即可 - 屏幕匹配模式(Screen Match Mode)选择匹配宽度或高度(Match Width Or Height)
- 将匹配(Match)滑块调整到合适值:
- 若希望按钮宽度占屏幕比例保持不变,滑块拉到最左侧(Match = 0,匹配宽度)
- 若希望按钮高度占屏幕比例保持不变,滑块拉到最右侧(Match = 1,匹配高度)
- 若需要兼顾横竖屏比例,滑块调整到0.3~0.7区间即可
方案2:代码动态调整尺寸(适合自定义适配规则)
将以下脚本挂载到需要适配的按钮上,按需调整缩放比例即可:
using UnityEngine; using UnityEngine.UI; public class ButtonAdapt : MonoBehaviour { // 竖屏状态下的按钮基准尺寸,按你开发时的正常大小填写 public Vector2 portraitButtonSize = new Vector2(200, 100); // 横屏状态下的缩放系数,按需求调整,默认0.6即缩小为竖屏的60% public float landscapeScale = 0.6f; private RectTransform btnRect; void Awake() { btnRect = GetComponent<RectTransform>(); Screen.orientationChanged += AdaptSize; // 初始化时适配一次 AdaptSize(Screen.orientation); } void AdaptSize(ScreenOrientation currentOrientation) { if (currentOrientation is ScreenOrientation.Portrait or ScreenOrientation.PortraitUpsideDown) { btnRect.sizeDelta = portraitButtonSize; } else if (currentOrientation is ScreenOrientation.LandscapeLeft or ScreenOrientation.LandscapeRight) { btnRect.sizeDelta = portraitButtonSize * landscapeScale; } } void OnDestroy() { Screen.orientationChanged -= AdaptSize; } }
方案3:锚点+布局组批量适配(适合多按钮统一调整)
如果页面存在多个需要适配的按钮,可通过布局组件统一管控:
- 给所有按钮的父容器添加
Horizontal Layout Group/Vertical Layout Group/Grid Layout Group组件 - 勾选布局组件中Control Child Size的宽度、高度选项,设置好内边距、子元素间距
- 将所有按钮的锚点设置为跟随父容器的相对位置,按钮会跟随父容器尺寸自动缩放,无需单独调整
内容的提问来源于stack exchange,提问作者Duy Ngô
相关产品推荐
相关产品推荐

