变换位置向量使用一些随机值

时间:2016-11-21 16:28:03

标签: c# unity3d

我正在改变按钮的位置(X和Y)。

我用transform.position

更改位置
devButton.transform.position = new Vector2(780, 620)

但是设置x = 780和y = 620,它将其设置为-500和-100。当我删除该行时,它不会影响按钮位置,所以我知道它没有从其他任何地方获得该值。

评论中的屏幕截图

好的,我有一些线索。它正在获取Canvas的位置(目前是1280,720),然后从我设置的矢量计算它的Canvas X - X.同样的Y和我也不知道为什么会这样做。

2 个答案:

答案 0 :(得分:1)

我设法做到了,这是解决方案:

首先,我发现由于某种原因,当我改变位置时,它出于某种原因通过Canvas当前posX和posY减去我的X和Y值,所以当我想改变位置时我将canvas posX添加到我的X和画布posY到我的Y.所以它就像这样

GameObject canvas;
float canvasPosX;
float canvasPosY;

private void Awake()
{
    canvas = GameObject.Find("Canvas");

    canvasPosX = canvas.transform.position.x;
    canvasPosY = canvas.transform.position.y;

    gameobject.transform.position = new Vector2(myX + canvasPosX, myY + canvasPosY)
}

我仍然不知道为什么帆布位置与按钮位置有任何联系,但我发现这对我有用:)

答案 1 :(得分:0)

如果您尝试使用NGUI系统设置 UI 元素的位置,那不幸的是,它并不容易。

首先,您必须使用RectTransform组件而不是传统的Transform

然后,您必须指明元素是否具有任何拉伸行为。当anchorMin和anchorMax属性不相同时,会发生拉伸行为。

  

对于非拉伸矩形变换,通过设置anchoredPosition和sizeDelta属性可以最轻松地设置位置。 anchoredPosition指定枢轴相对于锚点的位置。 sizeDelta与没有伸展时的大小相同。

     

对于拉伸Rect变换,使用offsetMin和offsetMax属性设置位置可能更简单。 offsetMin属性指定rect的左下角相对于左下锚点的角。 offsetMax属性指定rect的右上角相对于右上角锚点的角落。

来源:https://docs.unity3d.com/Manual/HOWTO-UICreateFromScripting.html

关于您给出的值与设置的值之间的差异,肯定是因为锚点没有按照您的预期定位。但没有任何进一步的信息,没有人能够帮助你。