Unity URP下相机固定分辨率 Camera.rect设置

以下为固定1920:1080分辨率时,相机设置

using UnityEngine;
using UnityEngine.Rendering.Universal;

public class FixRectCamera : MonoBehaviour
{
    private int screenW;
    private int screenH;
    const  float designWH = 1920 * 1f / 1080 ;
    private new Camera camera;
    private UniversalAdditionalCameraData urData;
    void Start()
    {
        camera = GetComponent<Camera>();
        urData = camera.GetUniversalAdditionalCameraData();
        screenW = Screen.width;
        screenH = Screen.height;
        UpdateCameraRect();
    }

                
    private void Update()
    {
        if (Screen.height != screenH || Screen.width != screenW)
        {
            UpdateCameraRect();
            screenW = Screen.width;
            screenH = Screen.height;
        }
    }
    
    void UpdateCameraRect()
    {
        var real = Screen.width * 1f / Screen.height;
        if (real < designWH)
        {
            var ratio = real / designWH;
            camera.rect = new Rect(0, (1 - ratio) / 2, 1f, ratio);
        }
        else if (real > designWH)
        {
            var ratio = designWH / real;
            camera.rect = new Rect((1 - ratio) / 2, 0, ratio, 1f);
        }
        
        if (urData.renderType == CameraRenderType.Base && !urData.cameraStack.IsEmpty())
        {
            urData.cameraStack.ForEach(subCamera=> subCamera.rect = camera.rect);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值