如何在RectTransform中计算sizeDelta?

时间:2017-06-10 09:10:01

标签: unity3d unityscript unity3d-ui

我编写了自定义布局所需的自定义内容修补程序。所以,当锚点不相同时,我需要控制RectTransform.sizeDelta属性,但我无法显示此值。
我不需要 Unity3D API 参考,我读了它并且没有任何内容因为它只是说:

  

此RectTransform的大小相对于。之间的距离   锚。如果锚在一起,sizeDelta与大小相同。   如果锚在父母的四个角中的每一个,那么   sizeDelta是矩形与之相比的大小   它的父母。

任何人都可以用正常语言解释这是什么意思?当锚点不相同时,如何手动计算?

3 个答案:

答案 0 :(得分:21)

这个定义确实有点令人困惑。

基本上,

sizeDelta返回UI元素的实际矩形与锚点定义的矩形之间的差异。

例如,给定一个300x200的矩形:

与矩形角落在同一位置的锚点:sizeDelta为(0,0) enter image description here

矩形半宽的左或右锚点:sizeDelta为(150,0) enter image description here enter image description here

点中的所有四个锚点:sizeDelta是(300,200)(即:与矩形相同的大小) enter image description here enter image description here

正如你所看到的那样,总是无关紧要锚点所定义的矩形的中心,唯一重要的是元素的宽度和高度之间的差异矩形和锚点矩形。

在伪代码中,它是这样的:

sizeDelta.x = UIElementRectangle.width - AnchorsRectangle.width;
sizeDelta.y = UIElementRectangle.height - AnchorsRectangle.height;

因此,如果UI矩形的尺寸大于锚点的尺寸,sizeDelta为正,如果它更小,则sizeDelta为负。

答案 1 :(得分:4)

sizeDelta:如果你进行了搜索,最后在这里找到sizeDelta的含义,比如GetComponent()。sizeDelta.y,那么请清醒一下。

可视化一个小的PANEL,放在一个大的CANVAS之上,它是Parent对象。 在PANEL的Rect Transform组件中,定义了2个矩形:

(a)由其锚定义的矩形。那些三角形。通常与父对象位置和尺寸相关,在本例中为CANVAS。

(b)由其自身大小定义的矩形,即PA​​NEL自身的维度。

sizeDelta =(b) - (a)

就是这样。因为通常是像Button这样的交互式组件,与其所在的对象相比尺寸较小,如Panel,因此,通常sizeDelta是负值。按钮大小 - 面板大小=通常为负值。 你知道一般设计理论中使用的负空间一词吗? 可以把它当作一个面板上没有按钮使用的空间。

示例: 如何找到Panel的高度,这是一个Canvas的Child,它是一个Camera叠加层,因此屏幕大小。面板的锚点与Canvas尺寸有关。脚本位于Panel对象上:

panelHeight = Screen.height + this.GetComponent()。sizeDelta.y;

请记住,sizeDelta通常是负数,所以它读起来更像这个伪代码:

panelHeight = Screen.height - this.sizeDelta.y

希望这可以帮助你,让我疯狂一段时间。干杯!

<强>参考文献:

https://www.youtube.com/watch?v=VhGxKDIKRvc

https://www.youtube.com/watch?v=FeheZqu85WI

答案 2 :(得分:0)

public Vector2 ActualSize(RectTransform trans, Canvas can)
{
    var v = new Vector3[4];
    trans.GetWorldCorners(v);
    //method one
    //return new Vector2(v[3].x - v[0].x, v[1].y - v[0].y);

    //method two
    return RectTransformUtility.PixelAdjustRect(trans, canvas).size;
}

此功能在开始时有效