Unity - неправильное позиционирование игровых объектов после их создания - PullRequest
0 голосов
/ 07 мая 2019

Я создаю экземпляр игрового объекта Board с использованием этого кода:

mainBoard.transform.position = camera.ViewportToWorldPoint(new Vector3(0f, 0f, camera.nearClipPlane));

Затем я пытаюсь заполнить эту доску путем создания экземпляров Tiles GameObjects с циклом:

for (int x = 0; x < width; x++)
         {
             for (int y = 0; y < height; y++)
             {                
                 Vector3 tempPosition = camera.ViewportToWorldPoint(new Vector3(x, y, camera.nearClipPlane));                    
                 GameObject backgroundTile = Instantiate(tilePrefab, tempPosition, Quaternion.identity) as GameObject;
                 backgroundTile.transform.SetParent(this.transform);
                 backgroundTile.name = "( " + x + "," + y + ")";

                 allTiles[x, y] = backgroundTile;               
             }
         }

Но плитки размещаются нане то место.Они должны быть расположены одна рядом друг с другом в левом нижнем углу экрана, но только первая плитка находится в правильном положении.

Как я могу правильно разместить все плитки на доске?

РЕДАКТИРОВАТЬ Вот префаб, который я создаю: enter image description here

Вот что я получаю:

enter image description here

и вот что я пытаюсь получить:

enter image description here

Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Если это для построения элемента пользовательского интерфейса, я бы использовал компонент сетки или вертикальный / горизонтальный макет в зависимости от того, что вы хотите сделать.Просто установите для экземпляра элемента родительский элемент сетки, который позаботится о макете

0 голосов
/ 07 мая 2019

Я не полностью посмотрел на ваш код, но попробуйте это;

for (int x = 0; x < width; x++)
         {
             for (int y = 0; y < height; y++)
             {                
                 Vector3 tempPosition = camera.ViewportToWorldPoint(new Vector3(x, y, camera.nearClipPlane));                    
                 GameObject backgroundTile = Instantiate(tilePrefab, tempPosition, Quaternion.identity,this.transform) as GameObject;

                 backgroundTile.name = "( " + x + "," + y + ")";

                 allTiles[x, y] = backgroundTile;               
             }
         }

попробуйте, иногда пользовательский интерфейс делает глупости, если вы устанавливаете parent после создания экземпляра. Так что лучше установить родительский элемент, когда вы создаете такой экземпляр;

GameObject backgroundTile = Instantiate(tilePrefab, tempPosition, Quaternion.identity,this.transform) as GameObject;
...