【问题标题】: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 anchorsenjoy the result 将此脚本附加到您的 RectTransform

【讨论】:

    猜你喜欢
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多