以下为固定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);
}
}
}