[英]UNITY: How to get the coordinates of the SafeArea rect?
我正在 Unity 中为 Android Portrait 模式开发一个项目。 我会不断修改两个 RawImage 的纹理,问题是图像的宽度和高度必须相同(1080x1080、800x800)1080x1079 是错误的。 因为现在很多手机都有缺口,我不得不在 SafeArea 矩形内维护所有 UI 元素。 但是,我不知道如何获取 SafeArea 矩形相对于显示器的 y 坐标。 这是一张照片:
因此,我只需要获取 SafeArea 矩形的 y 坐标,根据我的猜测,对于示例中的电话,y 坐标应该是 100 像素左右的高度。 先感谢您。
如果您使用的是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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.