我编写了自定义布局所需的自定义内容修补程序。所以,当锚点不相同时,我需要控制RectTransform.sizeDelta
属性,但我无法显示此值。
我不需要 Unity3D API 参考,我读了它并且没有任何内容因为它只是说:
此RectTransform的大小相对于。之间的距离 锚。如果锚在一起,sizeDelta与大小相同。 如果锚在父母的四个角中的每一个,那么 sizeDelta是矩形与之相比的大小 它的父母。
任何人都可以用正常语言解释这是什么意思?当锚点不相同时,如何手动计算?
答案 0 :(得分:21)
这个定义确实有点令人困惑。
基本上, sizeDelta
返回UI元素的实际矩形与锚点定义的矩形之间的差异。
例如,给定一个300x200的矩形:
点中的所有四个锚点:sizeDelta
是(300,200)(即:与矩形相同的大小)
正如你所看到的那样,总是无关紧要锚点所定义的矩形的中心,唯一重要的是元素的宽度和高度之间的差异矩形和锚点矩形。
在伪代码中,它是这样的:
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)由其自身大小定义的矩形,即PANEL自身的维度。
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
希望这可以帮助你,让我疯狂一段时间。干杯!
<强>参考文献:强>
答案 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;
}
此功能在开始时有效