繁体   English   中英

UNITY:如何获取 SafeArea 矩形的坐标?

[英]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);
        }
    }

只需将此脚本附加到带有拉伸锚点的 RectTransform 即可享受结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM