Canvas Scaler
canvas是所有UI的父节点,Canvas Scaler 组件会带有一些有关UI适配的设置,由于官方文档写的过于简练且抽象,乍一看总是不解其意。但是后来拿着结果去对照的时候,又发现写的不无道理,只不过,对于尚未理解的人来说,不太友好。比如:
Reference Pixels Per Unit
官方的解释是:如果sprite(精灵源文件)拥有‘Pixels Per Unit’> 这个设置,那么sprite的一个像素则对应unity中的一个单位
但是 sprite 中有 Pixels Per Unit 的设置,Canvas Scaler 中有 Reference Pixels Per Unit 设置,实际他们的关系是【Reference Pixels Per Unit】/【Pixels Per Unit】,所得的值才是这个 sprite 真正对应的 unity 单位值。
又例如:
Expand / Shrink :两个都是用来缩放 Canvas 使用的选项,Expand 多在放大的时候使用,因为他会以变化小的一边作为基准,而 Shrink 则是多用来缩小的时候使用,他会以变化大的一边作为缩放基准,两者的目的都是保证在分辨率没有按照 ratio 变化时,UI界面可以完全展示在画面中。
RectTransform
anchoredPosition
anchoredPosition 的官方解释是:
当前 Rect 的 pivot 的坐标和 anchor reference point 的差值,(也就是说这是一个二维向量)
那么问题来了,这个 anchor reference point 是什么?官方也有解释,就是当四个锚点在一起(四元归一)时,不用想了,就是这个点。但是四个分开的情况呢?
unity 会评估这四个锚点的位置,通过 pivot 的位置来作为这个引用值
第一次看,以为这个 pivot 是当前 Rect 的父节点的 pivot 。But,it make no sense…
那么这个 anchor reference point 是如何定义的呢。在编辑器里试了试,发现,这个 pivot 的【0,1】区间的值和当前 Rect 的 pivot 是完全一样的,也就是把这个值相同的 pivot 点放到了通过四个锚点而生成的矩形框内,然后,这个 anchoredPosition 就好计算了。
offsetMax / offsetMin
这两个好理解,就是 Rect 左上角和右下角的点和对应的两个锚点的向量差值。并且,四个锚点到 Rect 四个点的相对位置不变。
sizeDelta
这里面也有一个坑
当四元归一的时候,sizeDelta 就是 Rect 的值,当四个锚点分开的时候,大小是指这个 Rect 比他的父矩形大多少或者小多少
简单来说,就是 sizeDelta = offsetMax-offsetMin ,但是上文提到的父矩形,依旧是由锚点组成的矩形,而不是父物体的矩形。
Mask/RectMask2D
主要是写一下这两个组件的区别
Mask 是通过 image 来定义显示区域的,ScrollView 就是使用的这个组件,但是会增加 DC,而RectMask2D主要就是针对2D元素进行的优化,只可以用在2D UI 中,不可以在3D UI 中使用,但是他是通过 Rect 的边框来进行显示判定的,所以不会产生多余的 DC,而且会针对2D渲染由更好的优化。
RawImage/Image
The Raw Image control displays a non-interactive image to the user
Raw Image can accept any Texture
The UV Rectangle properties allow you to display a small section of a larger image