Позиция трансформации gameObject не совпадает с позицией трансформации родителя - PullRequest
0 голосов
/ 19 октября 2019

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

Я пытался использовать transform.localposition для правильной установки, но это абсолютно ничего не меняет, они все еще смещены.

public void OnDrop(PointerEventData eventData)
    {
        //If there's nothing already in this slot
        if(!item)
        {
            DragNDropController.itemBeingDragged.transform.SetParent(transform);

            DragNDropController.itemBeingDragged.transform.position = this.transform.position;
        }
    }

Вот результат: https://i.imgur.com/iosqVAT.pngОбратите внимание, что позиции X / Y -12,5 / 12,5. Если я изменю его на 0/0 в Rect Transform, то все выровняется идеально, но я не могу сделать это с помощью кода.

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Когда вы устанавливаете преобразование как дочернее по отношению к другому. Дочерняя позиция больше не представляет свою собственную позицию. Скажем так, это сумма всех родительских позиций + ее локальной позиции.

Итак, вы сделали ее дочерней по отношению к трансформации с позицией = 5,5,5,но затем вы заняли его положение, чтобы быть таким же, как его родитель, который является 5,5,5. Его общая позиция теперь составляет 10,10,10.

Вам необходимо установить его localPosition на 0,0,0, поэтому его позиция является родительской позицией, и куда бы ни шел слот, идет элемент.

Таким образом, чтобы правильно расположить его в центре слота, ваш код должен быть:

DragNDropController.itemBeingDragged.transform.SetParent(transform);

DragNDropController.itemBeingDragged.transform.localPosition = Vector3.zero;
0 голосов
/ 19 октября 2019

Вы, вероятно, пытаетесь установить локальное положение преобразования, вместо этого вам нужно получить RectTransform и установить его локальное расположение.
Код:

RectTransform myRectTransform = GetComponent<RectTransform>();
myRectTransform.localPosition += Vector3.zero;
myRectTransform.anchoredPosition += Vector3.zero;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...