rect变换在统一UI中的位置

时间:2017-05-02 10:52:34

标签: c# unity3d position rect

我在使用Unity的UI rectTransform进行编程时发现了一个非常令人困惑的问题:

在检查器中,我们可以发现RectTransform的位置设置为(0,0,0) enter image description here

但在Start()的代码中,当我打印位置时:

parentObject = transform.parent.gameObject;
Debug.Log("parentObject rectTransform :" + parentObject.GetComponent<RectTransform>().localPosition);

这将给我一个位置:

parentObject rectTransform :Panel: (0.0, -562.5, 0.0)
UnityEngine.Debug:Log(Object)
NewWorkerController:Start() (at Assets/Scripts/NewWorkerController.cs:60)

当我们尝试获取position而不是localPosition时,事情会更加混乱:

parentObject rectTransform :Panel: (621.0, 1365.5, 0.0)
UnityEngine.Debug:Log(Object)
NewWorkerController:Start() (at Assets/Scripts/NewWorkerController.cs:60)

我还在playMode中检查了这个rec​​tTransform的posX和posY,它指出它没有被更改(继续显示(0,0,0)

这有什么问题?

1 个答案:

答案 0 :(得分:3)

您在RectTransform组件中看到的不是本地位置。手册说:

  

定位UI元素

     

UI元素通常使用其Rect变换定位。如果UI元素是布局组的子元素,它将自动定位,并且可以跳过定位步骤。

     

当定位Rect变换时,首先确定它是否具有或应该具有任何拉伸行为是有用的。当anchorMin和anchorMax属性不相同时,会发生拉伸行为。

     

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

     

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

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

在您的情况下,您有一个非拉伸矩形变换。因此,尝试打印锚定位置:

parentObject = transform.parent.gameObject;
Debug.Log("parentObject rectTransform :" + parentObject.GetComponent<RectTransform>().anchoredPosition);