27

我编写了自定义布局所需的自定义内容装配器。所以,当锚点不同时我需要控制RectTransform.sizeDelta属性,但我无法显示这个值。
我不需要Unity3D API参考,我阅读了它并没有任何内容,因为它只说:

此 RectTransform 的大小相对于锚点之间的距离。如果锚点在一起,sizeDelta 与 size 相同。如果锚点位于父对象的四个角中,则 sizeDelta 是矩形与其父对象相比的大小。

谁能用普通语言解释它是什么意思?当锚点不同时,如何手动计算?

4

3 回答 3

52

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

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

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

与矩形的角在同一位置的锚点:sizeDelta为 (0,0) 在此处输入图像描述

矩形一半宽度的左或右锚点:sizeDelta是(150,0) 在此处输入图像描述 在此处输入图像描述

一个点中的所有四个锚点:sizeDelta是(300,200)(即:与矩形大小相同) 在此处输入图像描述 在此处输入图像描述

如您所见,锚点定义的矩形的中心在哪里并不重要,唯一重要的是元素矩形与锚点矩形的宽度和高度之间的差异。

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

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

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

于 2017-06-10T14:06:03.360 回答
11

sizeDelta:如果您进行了搜索,并最终在此处解释 sizeDelta 的含义,例如 GetComponent().sizeDelta.y,那么请理清思路。

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

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

(b) 由它自己的大小、面板自己的尺寸定义的矩形。

sizeDelta = (b) - (a)

而已。因为通常是一个交互式组件,如 Button,与它所在的对象(如 Panel)相比尺寸更小,因此,通常 sizeDelta 是负值。按钮大小 - 面板大小 = 通常为负值。您知道一般设计理论中使用的负空间一词吗?可以将其想象为搁在面板上的按钮未使用的空间。

示例: 如何找到面板的高度,即作为相机叠加层的 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

于 2018-03-07T00:17:14.580 回答
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;
}

此功能在开始时起作用

于 2020-01-12T09:41:34.587 回答