有关UGUI的思考

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值