CapersProject/Assets/02.Scripts/AspectRatioController.cs
Nam Tae Gun 139675f9dd 0.3.5.2
2024-12-01 02:07:45 +09:00

85 lines
2.4 KiB
C#

using System.Collections.Generic;
using UnityEngine;
namespace BlueWater
{
public class AspectRatioController : MonoBehaviour
{
[SerializeField]
private List<RectTransform> _canvasRectTransforms = new();
private float _targetAspect = 16f / 9f;
private void OnPreCull()
{
GL.Clear(true, true, Color.black);
}
private void Awake()
{
_canvasRectTransforms.Add(SceneController.Instance.Panel.GetComponent<RectTransform>());
EventManager.OnChangedDisplay += ChangeResolution;
}
private void OnDestroy()
{
EventManager.OnChangedDisplay -= ChangeResolution;
}
private float GetScaleHeight()
{
return ((float)Screen.width / Screen.height) / _targetAspect;
}
private void SetCamera()
{
Camera mainCamera = Camera.main;
Rect cameraRect = mainCamera.rect;
float scaleHeight = GetScaleHeight();
float scaleWidth = 1f / scaleHeight;
if (scaleHeight < 1f)
{
cameraRect.height = scaleHeight;
cameraRect.y = (1f - scaleHeight) / 2f;
}
else
{
cameraRect.width = scaleWidth;
cameraRect.x = (1f - scaleWidth) / 2f;
}
mainCamera.rect = cameraRect;
}
private void AdjustUI()
{
float scaleHeight = GetScaleHeight();
foreach (var element in _canvasRectTransforms)
{
if (scaleHeight < 1f)
{
element.anchorMin = new Vector2(0f, (1f - scaleHeight) / 2f);
element.anchorMax = new Vector2(1f, 1f - (1f - scaleHeight) / 2f);
}
else
{
float scaleWidth = 1f / scaleHeight;
element.anchorMin = new Vector2((1f - scaleWidth) / 2f, 0f);
element.anchorMax = new Vector2(1f - (1f - scaleWidth) / 2f, 1f);
}
element.offsetMin = Vector2.zero;
element.offsetMax = Vector2.zero;
}
}
public void ChangeResolution()
{
AdjustUI();
SetCamera();
}
}
}