2015-09-23 4 views
1

Может кто-нибудь объяснить, почему в редакторе я получаю:Unity GridLayoutGroup дети игнорируют изменение размера

enter image description here

время, на мой Galaxy S6, я получаю:

enter image description here

Мой Panel UI элемент (который является родительским) имеет компонент GridLayoutGroup, а также ContentSizeFitter. У дочерних элементов есть компонент LayoutElement с гибкостью ширины/высоты 120, и все анкеры устанавливаются на растяжение во всех направлениях.

Canvas установлен в шкале с размером экрана, с эталонным разрешением 320x480, а режим экрана соответствует высоте.

Независимо от количества квадратов (что является динамическим) редактор прекрасно изменяет размеры дочерних элементов в родительском элементе, но мое устройство делает их крошечными. Я действительно смущен.

Там нет установки размеров или анкеров в сценарии, чисто Instantiate и назначение родителей, например, так:

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 а также некоторые сообщения в блоге о «новых» инструментах пользовательского интерфейса, но ничто не меняет размеры на физическом устройстве и, похоже, ничего не меняет в редакторе, так как это остается неизменным.

Я уверен, что я делаю что-то глупое, но я исчерпал все возможности и надеялся, что кто-то раньше столкнулся с этой странностью.

ответ

5

Понял это в конце. Это связано с тем, что родительский объект масштабирует дочерние элементы (на основе пространства экрана, которое я предполагаю), что в этом случае было контрпродуктивным. Моя работа:

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

... было вручную переопределить масштабирование, и оно прекрасно работает на всех устройствах сейчас. Надеюсь, это поможет кому-то в будущем :)

+1

Вы также можете исправить это, выполнив 'emptyCell.transform.SetParent (cellHolder, false);'. Что происходит, так это то, что когда вы SetParent, он пытается сохранить тот же размер, что и в мировом пространстве, даже будучи родителем. Он делает это, изменяя localScale. Как только вы передадите этот 'false', он просто сохранит номера localScale, как они были (т. Е. Поддержит 1,1,1) вместо – Daniel

 Смежные вопросы

  • Нет связанных вопросов^_^