Unity中刘海屏手机的屏幕适配问题
发表于2018-12-14
Unity UGUI在刘海屏手机的屏幕适配主要是针对iPhoneX的适配。
解决方法是每一个界面的最上层都是一个横纵Stretch自动拉伸的,当检测到当前是IPhoneX时,打开界面代码自动设置Left Top Right Bottom 为44。
通过分辨率来判断当前手机是不是iPhoneX。
/// <summary> /// 自适应iPhoneX /// </summary> /// <param name="canvas">Canvas.</param> private void OpeniPhoneX(Canvas canvas){ #if UNITY_IPHONE if (Screen.width == 2436 && Screen.height == 1125){ RectTransform rectTransform = (canvas.transform as RectTransform); rectTransform.offsetMin = new Vector2(44f,0f); rectTransform.offsetMax = new Vector2(-44f,0f); } #endif }
接着就是界面最下面可能有些需要全屏的图,这样就不全屏了,所以需要给全屏图挂一个脚本。一般做全屏图有两种方式,一个是自动拉伸的,另一个就是AspectTatioFitter带裁切的全屏。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 自适应iPhoneX背景 /// </summary> public class UIRectLayout : MonoBehaviour { #if UNITY_IPHONE void Awake () { if (Screen.width == 2436 && Screen.height == 1125) { AspectRatioFitter aspectRatioFitter = GetComponent<AspectRatioFitter> (); if (aspectRatioFitter) { aspectRatioFitter.aspectRatio = 2.165333f; } else { RectTransform rectTransform = transform as RectTransform; if (rectTransform.anchorMax.x == 1f) { rectTransform.offsetMin = new Vector2(rectTransform.offsetMin.x - 44f,rectTransform.offsetMin.y); rectTransform.offsetMax = new Vector2(rectTransform.offsetMax.x +44f,rectTransform.offsetMax.y); } } } } #endif }