TIPS:UGUI可直接套用,其他UI可以参考思想,且只适用于竖屏游戏,至于允不允许翻转,那就是你们项目定的了~
接下来直接上代码,也是翻墙看的一篇文章转载的,谢谢原作者大佬。
using System;
using UnityEngine;
using UnityEngine.UI;
[DisallowMultipleComponent]//用于MonoBehaviour或其子类,不能重复添加这个类的组件,重复添加会弹出对话框
[RequireComponent(typeof(RectTransform))]
public class MySafeArea : MonoBehaviour
{
public CanvasScaler canvasScaler;
private float bottomUnits, topUnits;
public Text log;
void Start()
{
ApplyVerticalSafeArea();
}
public void ApplyVerticalSafeArea()
{
var bottomPixels = Screen.safeArea.y;
var topPixel = Screen.currentResolution.height - (Screen.safeArea.y + Screen.safeArea.height);
var bottomRatio = bottomPixels / Screen.currentResolution.height;
var topRatio = topPixel / Screen.currentResolution.height;
var referenceResolution = canvasScaler.referenceResolution;
bottomUnits = referenceResolution.y * bottomRatio;
topUnits = referenceResolution.y * topRatio;
var rectTransform = GetComponent<RectTransform>();
rectTransform.offsetMin = new Vector2(rectTransform.offsetMin.x, bottomUnits);
rectTransform.offsetMax = new Vector2(rectTransform.offsetMax.x, -topUnits);
log.text = $"Screen.safeArea.y = {bottomPixels}\n" +
$"Screen.currentResolution = {Screen.currentResolution}\n" +
$"rectTransform.offsetMin = {rectTransform.offsetMin}\n" +
$"rectTransform.offsetMax = {rectTransform.offsetMax}\n" +
$"Screen.safeArea.height = {Screen.safeArea.height}\n";
}
}