gameObject转换位置与父代的转换位置不对齐

时间:2019-10-19 14:02:33

标签: c# unity3d

我正在创建一个库存系统,您可以在其中将物品拖放到插槽中。我的问题是,当我将物品放入插槽时,它无法正确对齐。

我尝试使用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。如果我在Rect Transform中将其更改为0/0,则所有内容都将完美对齐,但是我似乎无法使用代码来做到这一点。

2 个答案:

答案 0 :(得分:0)

您可能正在尝试设置变形的本地位置,而应该获取RectTransform并设置其本地位置。
代码:

RectTransform myRectTransform = GetComponent<RectTransform>();
myRectTransform.localPosition += Vector3.zero;
myRectTransform.anchoredPosition += Vector3.zero;

答案 1 :(得分:0)

将变换设置为另一个变换时。 子位置不再代表自己的位置,让我们说它是所有父位置加上本地位置的总和。

因此,您将其作为位置= 5,5,5的变换的子级。 但随后您将它的位置与它的父级保持相同,即5,5,5。 现在其总排名为10、10、10。

您需要将其localPosition设置为0,0,0,因此其位置是其父位置,并且无论槽位在何处,都将该项移到该位置。

因此,为了将其正确放置在插槽的中央,您的代码应为:

DragNDropController.itemBeingDragged.transform.SetParent(transform);

DragNDropController.itemBeingDragged.transform.localPosition = Vector3.zero;