【问题标题】:UNITY: How to get the coordinates of the SafeArea rect?UNITY:如何获取 SafeArea 矩形的坐标?
【发布时间】:2021-03-08 22:42:31
【问题描述】:
我正在 Unity for Android Portrait 模式下开发一个项目。我会不断地修改两个 RawImage 的纹理,问题是图像的宽度和高度必须相同(1080x1080、800x800)1080x1079 是错误的。因为现在很多手机都有缺口,所以我不得不维护 SafeArea 矩形内的所有 UI 元素。但是,我不知道如何获取 SafeArea 矩形相对于显示器的 y 坐标。这是一张照片:
所以,我只需要获取 SafeArea 矩形的 y 坐标,根据我的猜测,对于示例中的电话,y 坐标应该是 100 像素左右的高度。提前谢谢你。
【问题讨论】:
标签:
c#
unity3d
safeareaview
【解决方案1】:
如果您使用 UI 缩放模式: 随屏幕大小缩放 Like in this picture,这是我的安全区域自适应 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);
}
}
只需使用 stretched anchors 和 enjoy the result 将此脚本附加到您的 RectTransform