Unity2d屏幕适配
从示意图中可以看出这两种模式都有可能会出现将图片裁切,导致我们实际的游戏内容显示不完整,影响用户体验,所以此处我们选择使用expand模式。
- 为什么要做屏幕适配
因为现在市场上的手机厂商很多,屏幕分辨率也有很多,分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素有多少.分辨率的单位有:(dpi点每英寸)、lpi(线每英寸)和ppi(像素每英寸)。图像的分辨率越高,所包含的像素就越多,图像就越清晰,印刷的质量也就越好。
但是也出现了问题,如果同样的图放到不同分辨率的手机上,展示出来的大小会与开发时想要展示的大小不同。如果想要在不同的分辨率显示相同的UI则需要根据每一个分辨率做相应的UI,但是这种方法会导致需要的资源很多,所以,我们是不是可以只用一套资源来让所有的分辨率都能以我们想要的方式展示出来,就需要给程序做屏幕适配。
- 如何实现屏幕适配
首先我们先搞明白Canvas(实际上就是所支持的设备屏幕,调节Game视图里面的分辨率就是调节Canvas的大小,也就是选择所支持的设备屏幕大小):确切的说是搞明白Canvas提供的缩放方案,然后应该确定一套分辨率作为我们的设计分辨率,然后在不同的手机上进行相应的缩放并确保我们游戏的有效内容区域都可以展示在屏幕上。
- Unity提供的屏幕适配方案
- expand:
这种方式会以宽和高中需要缩放的比例中较小的来进行缩放,这样需要缩放的比例较大的那个方向则会出现缩放比例不够而出现黑边的情况。无图无真相,来看一下实际的情况。首先看一下正常分辨率(750*1336):
如图是设计分辨率,再来看一下在pad上的展示结果:
可以看到图中,需要缩放比例较小的是高,但是宽度由于缩放比例不够两侧出现了黑边。再来看另一种情况:
这种情况跟之前的情况正好相反,因为高度缩放不够而出现的黑边,但是在这几种情况下最少可以保证我们游戏的有效内容都显示在了手机上,虽然不好看,但是不影响游戏的正常使用。
2、shrink
这个模式是和expand模式相对应的,expand以缩放较小的一边进行缩放有一边填充不满,shrink则是以相对缩放较大的一边进行缩放导致有一边缩放过大被裁切掉,看图
图中明显的可以看出来原来UI的两边被裁切掉了,导致游戏的内容显示不完整。跟expand对应再来看另外一种情况:
3、Match Width Or Height
这种模式与以上两种自动去选择缩放的方向不同,这种方式可以固定一个方向去进行缩放,如果选择的是适应宽度则是依照宽度的缩放比例缩放高度,反之则适应高度。还是来看一下实际情况
适应宽度:
适应高度:
- 使用哪种方式进行屏幕适配
要解决这个问题首先应该考虑我们游戏必须要展示的部分是什么,这里引入游戏有效内容和游戏实际内容和无效内容几个概念
从上图的介绍中可以看出在我们游戏开发完成之后无论在哪个手机上都应该讲游戏有效内容完整的显示出来。通过以上对几种模式的介绍可以发现,shrink肯定会将游戏内容裁剪掉一块儿,而Match Width Or Height也会有出现裁剪游戏内容的可能,只有expand模式会将我们设计游戏时的内容全部展示,所以我们此处选择了expand模式进行屏幕适配。
但是现在又遇了一个问题,expand模式会因为一个方向的缩放比例不够而出现黑边的情况,此处我们选择了用无效内容进行填充。也就是跟示意图一样两边的边框就是作为无效内容,如果是上下出现黑边则在上下做边框处理。由此实现屏幕适配。最后看一下正常的展示情况:
设计分辨率:
pad:
小米8:
这里出于实际情况只是将背景高度进行了拉伸,当然也可以在上下两边添加填充实现。
- 关于刘海屏的特殊处理
- 安卓设备
安卓API 28 中添加了对于刘海屏的处理,打包的时候选择28的API即可
图中黑边是状态栏,截屏的时候没有截到
- Iphone X
初步想法是判断是否是刘海屏,若是刘海屏则将游戏内容下移。
来源:CSDN
作者:beizijingzx
链接:https://blog.csdn.net/beizijingzx/article/details/82107565