效果如下:
首先感叹一下,UGUI的自适应做的还是非常不错的,RectTransform中提供了非常多种的自适应方式.对做界面来说还是很友好的.
如果界面上需要有个全屏的背景图(UI界面一般都是有的吧,弹框啥的除外),那么需要简单的这样设置就可以满足屏幕的自适应了(so easy):
不过这样的自适应方式是直接拉伸铺满整个屏幕的方式,并没有保障等比例拉伸,就是说背景图就会出现变形,以下面这张图为例(注意黄色的圆):
自带的自适应效果是这样的:
而等比例拉伸自适应的效果是这样的:
实现
第一步
既然是自己写代码来做自适应那么就得去掉UGUI给我们提供的自适应方式,修改为居中的方式
第二步: 获取当前需要展示的屏幕尺寸.
屏幕尺寸的获取直接通过Screen.width和Screen.height即可,但是如果Canvas中用了CanvasScaler中的ScreenMatchMode,那么画布的尺寸则不一定和屏幕分辨率一样(会出现我的RawImage的width和Height值设为屏幕分辨率,但还是没有刚好和屏幕吻合的情况)
不过可以简单的直接获取Canvas的尺寸:
//当前画布尺寸
Vector2 canvasSize = gameObject.GetComponentInParent<Canvas>().GetComponent<RectTransform>(