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

Unity中实现自动适配尺寸的UI网格布局方案咨询

Unity UI 自定义网格布局实现方案

完全可行,不管是用Grid Layout Group配合脚本,还是纯手写脚本都能实现你的需求,下面是具体步骤:

一、标题文本的适配

  • 给标题文本的RectTransform设置锚点为(0.5, 1)、Pivot为(0.5, 1),让它固定在屏幕顶部居中位置。
  • 动态设置标题高度:在脚本里获取屏幕高度,把标题的高度设为屏幕高度的10%,代码示例:
    RectTransform titleRect = GetComponent<RectTransform>();
    titleRect.sizeDelta = new Vector2(Screen.width, Screen.height * 0.1f);
    
  • 字体大小适配:给标题文本加Content Size Fitter组件,把Vertical Fit设为Preferred Size;如果用TextMeshPro,还可以通过脚本根据标题区域高度动态调整字体大小,确保文本不会溢出且占满合理空间,比如:
    TMP_Text titleText = GetComponent<TMP_Text>();
    titleText.fontSize = titleRect.rect.height * 0.8f; // 取高度的80%作为字体大小,避免贴边
    

二、网格布局实现(Grid Layout Group + 脚本)

  1. 先创建一个网格父容器,设置它的RectTransform锚点为(0, 0)到(1, 0),Pivot为(0.5, 0.5),高度设为屏幕高度的90%,宽度铺满屏幕,确保它在标题下方且占满剩余区域。
  2. 给父容器添加Grid Layout Group组件:
    • 设置Constraint为Fixed Column Count,值设为3(每行3个对象)
    • 设置Spacing为你需要的s值(水平和垂直间距可以分别设置)
    • 把Alignment设为Middle Center,确保网格整体居中
  3. 写脚本动态计算单元格尺寸:
    using UnityEngine;
    using UnityEngine.UI;
    
    public class GridAutoSize : MonoBehaviour
    {
        public GridLayoutGroup gridLayout;
        public float spacing = 20f; // 这里设置你要的s值
    
        void Start()
        {
            UpdateGridSize();
        }
    
        void OnRectTransformDimensionsChange()
        {
            UpdateGridSize(); // 屏幕尺寸变化时重新计算
        }
    
        void UpdateGridSize()
        {
            float H = Screen.height * 0.9f;
            // 按你的公式计算单元格高度
            float cellHeight = (H - 3 * spacing) / 2;
            // 计算单元格宽度,确保水平方向铺满且间距正确
            float cellWidth = (Screen.width - 2 * spacing) / 3;
    
            gridLayout.cellSize = new Vector2(cellWidth, cellHeight);
            gridLayout.spacing = new Vector2(spacing, spacing);
        }
    }
    
    把这个脚本挂在网格父容器上,关联好GridLayoutGroup组件即可。

三、纯脚本实现思路(不用Grid Layout Group)

如果不想用内置布局组件,也可以纯手写脚本控制每个Cat对象的位置和尺寸:

  • 先计算每个Cat的尺寸:cellHeight = (Screen.height*0.9f - 3*spacing)/2,cellWidth = (Screen.width - 2*spacing)/3
  • 计算每行三个对象的X坐标:以屏幕中心为基准,向左偏移总宽度的一半,依次加上单元格宽度和间距
  • 计算两行的Y坐标:先算出上下边距margin = (H - (cellHeight*2 + spacing))/2,第一行Y中心为H - margin - cellHeight/2,第二行Y中心为margin + cellHeight/2
  • 遍历所有Cat对象,逐个设置它们的RectTransform的anchoredPosition和sizeDelta

注意事项

  • 要监听屏幕尺寸变化事件(比如OnRectTransformDimensionsChange或者Screen.onResize),确保布局在窗口缩放时能实时更新
  • 如果Cat对象有固定宽高比,计算宽度时要按比例调整,避免拉伸变形

内容的提问来源于stack exchange,提问作者soleil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:34:55