2

我正在 Unity for Android Portrait 模式下开发一个项目。我会不断修改两个 RawImage 的纹理,问题是图像的宽度和高度必须相同(1080x1080、800x800)1080x1079 是错误的。因为现在很多手机都有缺口,我不得不在 SafeArea 矩形内维护所有 UI 元素。但是,我不知道如何获取 SafeArea 矩形相对于显示器的 y 坐标。这是一张照片: 这是一张照片

因此,我只需要获取 SafeArea 矩形的 y 坐标,根据我的猜测,对于示例中的电话,y 坐标应该是 100 像素左右的高度。先感谢您。

4

1 回答 1

0

如果您使用的是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 即可享受结果

于 2021-03-08T14:42:31.250 回答