我编写了自定义布局所需的自定义内容装配器。所以,当锚点不同时我需要控制RectTransform.sizeDelta
属性,但我无法显示这个值。
我不需要Unity3D API参考,我阅读了它并没有任何内容,因为它只说:
此 RectTransform 的大小相对于锚点之间的距离。如果锚点在一起,sizeDelta 与 size 相同。如果锚点位于父对象的四个角中,则 sizeDelta 是矩形与其父对象相比的大小。
谁能用普通语言解释它是什么意思?当锚点不同时,如何手动计算?
我编写了自定义布局所需的自定义内容装配器。所以,当锚点不同时我需要控制RectTransform.sizeDelta
属性,但我无法显示这个值。
我不需要Unity3D API参考,我阅读了它并没有任何内容,因为它只说:
此 RectTransform 的大小相对于锚点之间的距离。如果锚点在一起,sizeDelta 与 size 相同。如果锚点位于父对象的四个角中,则 sizeDelta 是矩形与其父对象相比的大小。
谁能用普通语言解释它是什么意思?当锚点不同时,如何手动计算?
确实,这个定义有些令人困惑。
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
则为负。
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
希望这对你有帮助,让我发疯了一段时间。干杯!
参考:
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;
}
此功能在开始时起作用