Unity中刘海屏手机的屏幕适配问题

发表于2018-12-14
评论1 7.7k浏览
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
}

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引