「Unity3D」RectTransform的AnchorMin与Max直接定位到Rect四角,使得Left-Top-Right-Bottom都为0
在UGUI中,可以手动拖动AnchorMin与AnchorMax的四个手柄,和RectTransform的四角对齐,使得Left-Top-Right-Bottom都为0,这样RectTransform就可以随着父类尺寸而等比缩放。如下图所示:
但除了操作比较麻烦以外,还有一个情况是,如果这个RectTransform放在了在Parent之外的区域,那么Anchor的手柄,就只能在父类区域子类拖动,即处在Anchor的范围内,无法实现上述需求。如下图所示:
那么,通过填入数值,而不是拖动手柄,Anchor是可以超出[0, 1]的范围的——并且,通过代码可以直接计算出,这个使得Left-Top-Right-Bottom都为0的数值。如下代码:
var parentRect = (rt.parent as RectTransform).rect;var min = rt.offsetMin / parentRect.size + rt.anchorMin;
var max = rt.offsetMax / parentRect.size + rt.anchorMax;Debug.Log($"anchorMin = {min} anchorMax = {max}");
注意,不要通过代码,直接设置这个Anchor的min与max,因为代码模式会修改Rect的显示,以维持anchoredPosition与sizeDelta不变。
当然,可使用另一篇文章,实现的方法,可以只设置Anchor而不改变Rect显示:运行时设置元素的锚点Anchor,维持元素Rect的显示不变
另外,为什么要将Anchor定位到Rect的四角,可以参看这个:将元素固定在,距离屏幕边缘的某个比例,以及保持元素自身比例