2015-05-25 3 views
0

Мне нужно поместить стопку коробок друг на друга в зависимости от высоты предыдущего окна.Unity2d Размещение объектов Adjacently

Высота коробки динамическая.

foreach(cBox box in currentLevel.mMiddleRack.BoxWeightList) 
     { 
      box.mBoxImage = (GameObject) Instantiate(boxTemplate); 
      box.setBoxPosition(firstBoxPostion.x, firstBoxPostion.y, firstBoxPostion.z); 
      firstBoxPostion.y += box.mBoxImage.transform.localScale.y; 
      firstBoxPostion.z -= 1.0f; 

      box.shapeBox(); 
     } 

Результат enter image description here

+0

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

+0

ОП заявила: «Высота ящиков динамична»; поэтому коробки могут быть разных размеров. Localscale обеспечивает пропорции к исходному размеру (коэффициент масштабирования), который не дает единиц в мировом пространстве. Для доступа к границам объекта в мировом пространстве требуется доступ к его коллайдеру или его определение из его сетки. –

+0

Размер окна, являющийся динамическим, не обязательно означает, что их размеры являются однородными. Они все еще могут быть динамическими - меняют размер во время выполнения - и имеют разные размеры, поэтому OP может потребоваться проверить размер предыдущего окна во время создания экземпляра в цикле. – Varaquilex

ответ

1

Transform.localscale не обеспечивает размер объекта, если объект случайно не происходит, чтобы иметь один и тот же масштаб, что его размер (примитивный объект, который имеет размер of (1,1,1)).

Попытайтесь получить размер объекта с помощью BoxCollider или, если используете 2D-физику, BoxCollider2D. Используйте переменную размера, чтобы рассчитать положение ящиков.

+0

* Transform.localscale не предоставляет размер объекта, если объект по совпадению не имеет того же масштаба, что и его размер. * Это неправильный человек. [Transform.localScale] (http://docs.unity3d.com/460/Documentation/Manual/class-Transform.html): «Значение« 1 »- это исходный размер (размер, при котором объект был импортирован). " – Varaquilex

+0

Как это неправильно? Transform.localScale пропорционален исходному размеру, который игнорирует единицу пространства. В этой задаче нужны единицы, а не произвольные масштабные факторы. –

+0

Кажется, что существует путаница в отношении того, что представляет собой локальная область. Объект с мировым размером 10 единиц в ширину, 5 единиц в длину и 4 единицы высоты может иметь локальную шкалу 1. Это происходит, когда первоначальная сетка имеет 10 широких, 5 длинных и 4 высоких. –

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