簡體   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