如何通过代码访问RectTransform的左,右,上,下位置?

San*_*waj 18 unity-game-engine unity3d-gui

我有一个带有渲染模式世界空间集的UI画布.对于属于此画布的所有UI元素,我在编辑器的RectTransform组件中看到"left","right","top"和"bottom"变量.有没有办法通过代码访问这些变量?

mak*_*iuk 33

那些会是

RectTransform rectTransform;

/*Left*/ rectTransform.offsetMin.x;
/*Right*/ rectTransform.offsetMax.x;
/*Top*/ rectTransform.offsetMax.y;
/*Bottom*/ rectTransform.offsetMin.y;
Run Code Online (Sandbox Code Playgroud)


Num*_*mid 5

RectTransform rt = GetComponent<RectTransform>();
float left   =  rt.offsetMin.x;
float right  = -rt.offsetMax.x;
float top    = -rt.offsetMax.y;
float bottom =  rt.offsetMin.y;
Run Code Online (Sandbox Code Playgroud)

TL; 博士

从这些值显示在检查器,我的分析是LeftRightTopBottom为正,如果相应的边界是在通过的锚形矩形RectTransform

offsetMin.x作为LeftoffsetMin.y作为Bottom始终但是实现这一评估offsetMax.x作为RightoffsetMax.y作为Top不。

我只是取了相反的值offsetMax以使其兼容(基本空间修改)。

  • 这并不总是有效。它取决于锚点等...Unity确实需要提供一种方法来确保您的代码能够正常工作,而不是弄乱其他变量。 (2认同)

小智 5

上面两个答案有点正确,我因此一直拖延我的项目,但在床上编程时发现的。offsetMin 和 offsetMax 是您所需要的,但它们并不是全部,您需要包含来自矩形变换的锚点:

public RectTransform recTrans;

// Use this for initialization
void Start () {
    Vector2 min = recTrans.anchorMin;
    min.x *= Screen.width;
    min.y *= Screen.height;

    min += recTrans.offsetMin;

    Vector2 max = recTrans.anchorMax;
    max.x *= Screen.width;
    max.y *= Screen.height;

    max += recTrans.offsetMax;

    Debug.Log(min + " " + max);
}
Run Code Online (Sandbox Code Playgroud)

如果您将其插入虚拟类,无论您使用什么锚点,它都应该为您提供正确的读数。

它的工作方式应该是显而易见的,但简单的解释也不会有什么坏处。

偏移量指的是最小值和最大值距矩形变换中心点的位置差异,将它们添加到锚点边界给出正确的矩形变换的最小值和最大值。尽管锚点的最小值和最大值已标准化,因此您需要通过乘以屏幕尺寸来缩小它们。