RectTransform 中的 Anchors 用来指定每个UI元素相对于父节点内某个矩形对齐.
在 Inspector 中可看到,AnchorMin 和 AnchorMax 定义了一个矩形(矩形的边可以重合),这个矩形可以在 Scene 里看到(由四个白色三角标识)。
AnchorMin 和 AnchorMax 的值是归一化的,对应表示 AnchorRect 位置在父节点 Rect 中是相对的,在编辑时 UnityEditor 会给出百分比提示。
当调整UI大小时,RectTransform 的 Scale 不会发生改变,改变的是 SizeDelta。当UI大小发生改变时,AnchorRect的四个点会随之发生变化(根据AnchorMin和AnchorMax进行插值),因为子元素的 Rect 和 AnchorRect 每两对应边的相对位移不变,从而实现子元素随着父节点大小和位置改变而改变。(下面是示意图)
换句话说,当父节点 Size 发生改变时,AnchorRect 会随之变化(包括位置和大小),因为子元素的Rect要跟AnchoredRect保持一致性,从而调整大小和位置。
当AnchorRect 双边重合时,不管父节点大小如何改变AnchorRect的大小始终为0,意味着子元素的大小也不会发生改变,这时子元素只是对AnchorPoint(大小为0的AnchorRect)进行位置的对齐。
了解 Anchors 的工作方式后,再做屏幕适配就可以视情况而定了。
UGUI必需要用一个Canvas来做为根节点, 我们可以用 Editor 把Game窗口设置为 Free Aspect形式,然后拖动改变窗口大小来观察适配效果。
这时你会发现,视窗大小发生改变时实际上发生改变的是Canv