Unity2D - transform.position не равно реальной позиции - PullRequest
0 голосов
/ 05 января 2019

Хорошо, название может сбивать с толку, потому что я не знаю, как это сказать.

Мой случай: у меня есть 2d спрайт с 4 дочерними объектами, каждый из которых размещается вокруг спрайта как периметр. Так это выглядит так:

enter image description here

Spawner2 имеет скрипт со следующим методом, который вызывается в начале игры. Внутри скрипта я создал новый префаб:

public void GenerateBox(int count)
{
    ...
    GameObject spawnedRoom = Instantiate(possibleRooms[chosen], transform.position, Quaterion.identity);
}

Но это создает экземпляр объекта в местоположении Spawner1.

Итак, я попытался отладить. Я вытащил Spawner2 из его родителя и увидел местоположение (X: 1.0062, Y: -0.0038). Я помещаю его обратно в 2d спрайт, и когда я отлаживаю его положение, он дает мне X: 0, Y: 1, Z: -9.8.

Это из-за моего сборного дома? В чем проблема и как ее исправить?

Ответы [ 2 ]

0 голосов
/ 06 января 2019

РЕДАКТИРОВАТЬ: я запустил новый проект и сделал то же самое, за исключением того, что теперь prefab позиция установлена ​​на 0 по всем осям. Теперь все отлично работает. Я предполагаю, что это происходит из-за позиции сборного. Например, вы создаете экземпляр префаба в скрипте в (0, 0, 0) мировой позиции, а префаб позиция (2, 1, 0), тогда префаб будет появляться в (2, 1, 0) мировой позиции. Это позиция + сборная позиция .

0 голосов
/ 05 января 2019

Используйте этот перегруженный метод вместо:

Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);

и передайте родительское преобразование Spawner2 в качестве последнего параметра. Теперь новый объект должен быть расположен в том же месте, что и Spawner2. В конце ваша функция должна выглядеть так:

public void GenerateBox(int count)
{
    ...
    GameObject spawnedRoom = Instantiate(possibleRooms[chosen], transform.position, Quaterion.identity, transform.parent);
}
...