如果您使用的是UI Scale Mode: Scale with screen size 就像这张图片,这里是我的自适应 RectTransform 解决方案与您的安全区域(仅垂直):
using UnityEngine;
using UnityEngine.UI;
public class MySafeArea : MonoBehaviour
{
private CanvasScaler canvasScaler;
private float bottomUnits, topUnits;
void Start()
{
canvasScaler = FindObjectOfType<CanvasScaler>();
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);
}
}
只需将此脚本附加到带有拉伸锚点的RectTransform 即可享受结果