Изменение родительского объекта для экземпляра изменяет его положение, как мне сохранить его в созданном месте - PullRequest
0 голосов
/ 12 января 2019

Я хочу создать экземпляр объекта в заданной позиции, затем изменить его родителя на другой игровой объект, но сохранить созданный объект в той же позиции, в которой я его создал. Вместо этого объект меняет свою позицию на объект, к которому я привязан.

У меня есть этот пустой GameObject, к которому применяется скрипт. Я создаю экземпляр объекта в другой пустой позиции GameObject, которая работает нормально. Затем я установил экземпляр объекта как дочерний элемент другого пустого GameObject, потому что я хочу переместить GameObject, который я использовал в качестве позиции создания экземпляра, не перемещая экземпляр объекта, потому что я хочу продолжать создание экземпляра этого объекта на новой позиции. Но это не помогает, сгенерированный мной объект перемещается в положение 3-го пустого GameObject, который я устанавливаю в качестве родителя.

GameObject theTile = Instantiate(thePrefab, spawningZone.transform);
theTile.transform.SetParent(parentObj.transform);

После установки нового родителя экземпляр объекта перемещается в положение родителя. Я попробовал несколько способов сделать это, но для каждого метода, который я пробовал, происходило одно и то же, экземпляр объекта перемещался в позицию нового родителя. Вот альтернативные методы, которые я пробовал:

GameObject theTile = Instantiate(thePrefab, spawningZone.transform);
theTile.transform.parent = transform.parent;

;

GameObject theTile = Instantiate(thePrefab, spawningZone.transform);
theTile.transform.SetParent(parentObj.transform, false);

;

Vector3 originalPos = spawningZone.transform.position;
GameObject theTile = Instantiate(thePrefab, spawningZone.transform);
theTile.transform.SetParent(parentObj.transform);
theTile.transform.position = originalPos;

Ответы [ 3 ]

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

Новые экземпляры объектов имеют позицию по умолчанию local-0,0,0. Если вы предоставляете им родителя в вызове Instantiate, они создаются в месте расположения родительского объекта (если вы не родите их до тех пор, тогда они появятся в world-0,0,0).

Вы фактически никогда не вносите никаких изменений в позицию. Даже этот фрагмент,

    Vector3 originalPos = spawningZone.transform.position;
    GameObject theTile = Instantiate(thePrefab, spawningZone.transform);
    theTile.transform.SetParent(parentObj.transform);
    theTile.transform.position = originalPos;

устанавливает положение theTile идентичным положению spawningZone.

(Если вы не знали, создание префаба игнорирует положение и поворот корневого объекта префаба)

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

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

0 голосов
/ 12 января 2019
GameObject theTile = Instantiate(thePrefab, spawningZone.transform);
theTile.transform.SetParent(parentObj.transform, true);

public void SetParent (Преобразование родителя, bool worldPositionStays);

2-й пункт должен быть правдой. Так что он останется там, где был.

le.transform.position = originalPos;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...