【问题标题】:Unity GridLayoutGroup children ignoring resizingUnity GridLayoutGroup 子级忽略调整大小
【发布时间】:2015-09-23 20:33:47
【问题描述】:

谁能解释为什么,在我得到的编辑器中:

在我的 Galaxy S6 上,我得到:

我的Panel UI 元素(它是父元素)具有GridLayoutGroup 组件以及ContentSizeFitter。子元素有一个 LayoutElement 组件,其 FlexibleWidth/Height 为 120,并且所有锚点都设置为向所有方向拉伸。

Canvas 设置为 Scale with Screen size,参考分辨率为 320x480,屏幕模式与高度匹配。

无论有多少正方形(动态),编辑器都可以完美地调整父元素中子元素的大小,但我的设备使它们变得很小。我真的很困惑。

脚本中没有设置大小或锚点,纯粹是实例化和父级分配,如下所示:

    for(int i=0; i < amount; i++)
    {
        GameObject emptyCell = (GameObject)Instantiate(emptyCellObject);
        emptyCell.transform.SetParent(cellHolder);
        emptyCell.GetComponent<RectTransform>().localPosition = new Vector3(0f, 0f, 0f);
        emptyCells.Add(emptyCell);
    }

我还检查了与以下相关的所有文档:http://docs.unity3d.com/Manual/comp-UIAutoLayout.html - 甚至是 UI 教程电影,以及一些关于“新”UI 工具的博客文章,但没有任何改变物理设备上的尺寸,而且似乎在编辑器中不做任何更改,因为它保持不变。

我确信我在做一些愚蠢的事情,但我已经用尽了所有途径,并希望以前有人遇到过这种奇怪的事情。

【问题讨论】:

    标签: unity3d unityscript unity3d-gui


    【解决方案1】:

    最后想通了。是由于父对象缩放子元素(基于我假设的屏幕空间),在这种情况下会适得其反。我的解决方法:

    emptyCell.GetComponent<RectTransform>().localScale = Vector3.one;
    

    ...是我自己手动覆盖缩放,现在它在所有设备上都很好用。希望这对将来的人有所帮助:)

    【讨论】:

    • 你也可以通过emptyCell.transform.SetParent(cellHolder, false);来解决这个问题。发生的事情是,当您设置父对象时,它会尝试保持与世界空间中相同的大小,即使是在被父对象时也是如此。它通过修改 localScale 来实现。一旦你通过了false,它就会保持 localScale 数字不变(即保持 1,1,1)
    猜你喜欢
    • 2011-11-23
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2014-03-06
    • 2020-02-05
    • 2020-05-13
    • 2014-12-29
    相关资源
    最近更新 更多