屏幕适配:简单说,就是将UI以适当的尺寸显示在屏幕上的适当位置。
比如我们在手机上运行一个小游戏,打开它的菜单栏,一般都是如下画风

换一个手机,那就有可能是这个样子

现在市场上流行的像iPhone X的刘海屏,很多Android手机的水滴屏,刘海屏,短刘海屏等等一系列手机,如果根据机型来适配,机型太多适配较复杂;我下面要介绍的是根据刘海屏、水滴屏等来适配,好在unity3d引擎在2017.2以上版本提供了屏幕安全区接口Screen.safeArea;
Screen.safeArea会返回移动平台安全区的Rect。例如,iPhoneX(2436x1125px)竖屏时,Screen.safeArea返回的值为Rect(0,132,2172,1125)。如图:

Screen.safeArea描述
返回屏幕的安全区域(以像素为单位)(只读)。
在某些显示器上,屏幕的某些区域可能对用户不可见。 这可能是由于显示器的形状并非矩形或是由过扫描(例如电视机屏幕)引起的。 请勿将用户界面元素放置到安全区域矩形以外的区域。 安全区域的最大大小是屏幕分辨率(以像素为单位),定义为 Rect(0, 0, Screen.width, Screen.height)。
设计思路顶部和底部设计到的UI界面尽量放到Screen.safeArea返回的Rect安全区域,如果不影响玩家点击交互的按钮可以不用放到安全区域,具体根据每个项目不同设计。为了不影响整体布局,安全区域以外可以用和背景颜色相近的图片完全填充。如下图:

很多Android上需要再Player Settings中勾选Render outside safe area,在安全区域以外渲染

如果不勾选Render outsde safe area unity默认只在安全区域以内渲染而自动裁剪了安全区域以外的地方。
_rectTransform = this.GetComponent<RectTransform>();
_rectTransform.offsetMax = new Vector2(0, ((Screen.safeArea.height + Screen.safeArea.y) - Screen.height) * FixScreen.height / Screen.height);
网友评论