好久没更新博客了,自从入了游戏的坑,都还在学习阶段,平时都是记录在自己的笔记上,决定抽空都转换成博客,都是一些基础加上自己工作中遇到的情况,分享出来,给想入门的人一些参考吧。
UGUI的屏幕自适应,是通过Canvas Scaler来做的,根据屏幕的分辨率,计算出canvas的大小,同时计算ScaleXY,通过Size + Scale来控制Canvas的变换,UI作为canvas的子物体,也会跟随着一起变化;为了保证UI的位置,需要在设计UI的时候,对角落,边缘的UI做特殊的处理,利用锚点来保证UI与边缘或角落的距离,锚点的概念就不多说了,一句话:锚点的向量值就是锚点与自己轴心的距离。根据ugui提供的几种默认的锚点位置,就能满足基本的需求,然后改变分辨率,再验证一下UI的位置是否正确。
Canvas Scaler
首先要明确几个概念:
- Reference Resolution : 参考的屏幕大小,选择主流的分辨率,在这个分辨率下设计UI。
- Screen Size : 当前的屏幕大小
- Canvas Size : Canvas RectTransform的宽高
- Scale Factor: 用于计算ScaleXy,缩放Canvas,来适应屏幕。 ScaleFactor = ScreenSize / Canvas Size;只有当canvas的renderMode为screen Space时才有效。
- Canvas.Rectransform.ScaleXYZ , canvas的缩放比例
在ScreenSpace->overlay模式下,ScaleXYZ = scaleFactor
在ScreenSpace->Camera模式下,ScaleXYZ = scaleFactor * scaleFactorCamera(只是说明camera的影响因子)
UI Scale Mode是三种模式
Constant Pixel Size
通过Scale Factor直接缩放所有的UI元素,按照scaleFactor = Screensize/ canvasSize的规则变化。
当scaleFactor= 1时,canvasSize和screenSize是相等的。
接下来是参数:Reference pixels Per Unit,每单位的像素数,用来决定UI在世界坐标中的大小。
其实还有另外一个pixel per unit,它是Sprite的属性,这两个有什么关系呢?
PixelPerUnit = spritePixelperUnit / re