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

发表于2018-12-14
评论1 1k浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏美术行业精英群

167422913
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
}

原文链接

著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

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

游戏学院公众号二维码
腾讯游戏学院
微信公众号

提供更专业的游戏知识学习平台