Unity竖屏游戏异形屏适配方案

TIPS:UGUI可直接套用,其他UI可以参考思想,且只适用于竖屏游戏,至于允不允许翻转,那就是你们项目定的了~

接下来直接上代码,也是翻墙看的一篇文章转载的,谢谢原作者大佬。 

using System;
using UnityEngine;
using UnityEngine.UI;

[DisallowMultipleComponent]//用于MonoBehaviour或其子类,不能重复添加这个类的组件,重复添加会弹出对话框
[RequireComponent(typeof(RectTransform))]
public class MySafeArea : MonoBehaviour
{
    public CanvasScaler canvasScaler;
    private float bottomUnits, topUnits;
    public Text log;
    void Start()
    {
        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);


        log.text = $"Screen.safeArea.y = {bottomPixels}\n" +
            $"Screen.currentResolution = {Screen.currentResolution}\n" +
            $"rectTransform.offsetMin = {rectTransform.offsetMin}\n" +
            $"rectTransform.offsetMax = {rectTransform.offsetMax}\n" +
            $"Screen.safeArea.height = {Screen.safeArea.height}\n";
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值