2015-09-23 27 views
1

任何人都可以解释为什么,在编辑器中,我得到:团结GridLayoutGroup孩子忽略调整

enter image description here

同时,我的银河S6,我得到:

enter image description here

Panel UI元素(它是父级)具有GridLayoutGroup组件,以及ContentSizeFitter。子元素具有柔性宽度/高度为120的LayoutElement组件,并且所有锚点都设置为在所有方向上拉伸。

Canvas设置为屏幕尺寸比例,参考水平为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工具的博客文章,但没有改变物理设备上的尺寸,并且编辑器中没有任何改变,因为它仍然是一样的。

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

回答

5

最终得出这个结论。是由于父对象缩放了子元素(基于我所假设的屏幕空间),在这种情况下这是相反的。我的工作:

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

...是手动覆盖缩放自己,它现在可以在所有设备上运行。希望这可以帮助别人在未来:)

+1

你也可以通过'emptyCell.transform.SetParent(cellHolder,false);'来解决这个问题。发生什么事情是,当您使用SetParent时,即使在父母身份的情况下,它也会尽可能保持与世界空间相同的大小。它通过修改localScale来实现。一旦你传递了这个'false',它就会保持localScale数字原样(即保持1,1,1) – Daniel