You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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ô

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:06:04