[Unity] 해상도에 따른 카메라 거리 조절
![[Unity] 해상도에 따른 카메라 거리 조절](/_next/image?url=https%3A%2F%2Fdata.develog.develrocket.com%2Fupload%2Fdevelog%2Fuser_1777093328305%2F1779451349404-keil4h%2F_____2026-05-22_205730.png&w=3840&q=75)
개요
3인칭 쿼터뷰 게임에서 Cinemachine을 사용하다가 해상도를 바꿔보는데 Distance가 일정하여 특정 해상도에서는 플레이어가 너무 커보이고, 특정 해상도에서는 플레이어가 너무 작아보이는 현상이 발생했다.

이런 시점에서 시뮬레이터를 테블릿으로 바꾸면

뭔가 다른 느낌이 좀 있다
그래서 해상도 비율에 맞춰 카메라를 이동 시키는 코드를 작성해 보았다.
using Cinemachine;
using UnityEngine;
[ExecuteAlways]
public class SafeAreaCameraAdjuster : MonoBehaviour
{
[SerializeField]
private CinemachineVirtualCamera virtualCamera;
[SerializeField]
private float baseDistance = 8f;
[SerializeField]
private float distanceAdjustRange = 2f;
private CinemachineFramingTransposer framingTransposer;
private Rect lastSafeArea = Rect.zero;
private Vector2Int lastScreenSize = Vector2Int.zero;
private void Awake()
{
framingTransposer = virtualCamera.GetCinemachineComponent<CinemachineFramingTransposer>();
}
private void OnEnable()
{
Apply();
}
private void Update()
{
Vector2Int screenSize = new Vector2Int(Screen.width, Screen.height);
if (Screen.safeArea == lastSafeArea && screenSize == lastScreenSize)
return;
Apply();
}
private void Apply()
{
if (framingTransposer == null)
return;
Rect safeArea = Screen.safeArea;
Vector2Int screenSize = new Vector2Int(Screen.width, Screen.height);
if (screenSize.x == 0 || screenSize.y == 0)
return;
lastSafeArea = safeArea;
lastScreenSize = screenSize;
float aspectRatio = (float)screenSize.x / screenSize.y;
float baseAspect = 16f / 9f;
// 태블릿(비율 작음) → 양수 → 멀어짐
// 폰(비율 큼) → 음수 → 가까워짐
float aspectDiff = baseAspect - aspectRatio;
float distanceOffset = aspectDiff * distanceAdjustRange;
distanceOffset = Mathf.Clamp(distanceOffset, -distanceAdjustRange, distanceAdjustRange);
float finalDistance = baseDistance + distanceOffset;
// Debug.Log(
// $"aspectRatio: {aspectRatio}, distanceOffset: {distanceOffset}, finalDistance: {finalDistance}"
// );
framingTransposer.m_CameraDistance = finalDistance;
}
}
- Unity 의 화면 비율(Screen Aspect Ratio)에 따라 카메라 거리를 자동 조절
- Cinemachine 의
CinemachineFramingTransposer를 사용해 카메라 거리 변경 Screen.safeArea와 화면 크기 변화를 감지해 필요할 때만 갱신- 16:9 비율을 기준으로 현재 기기의 화면 비율과 비교
- 태블릿처럼 화면이 넓은 경우 카메라를 멀리 배치
- 세로로 긴 스마트폰은 카메라를 가까이 배치
Mathf.Clamp()로 거리 변화 범위를 제한해 과도한 줌 방지[ExecuteAlways]를 사용해 에디터에서도 실시간 확인 가능- 다양한 모바일 기기에서 비슷한 화면 구성을 유지하기 위한 목적의 코드
사용 안할때


사용했을 때


크게 차이가 없는 것 같지만 최대 거리, 최소 거리를 조절해서 사용하면 나중에 도움될 수 있을 것 같아 정리해봤습니다.


![[Unity] PC 세이브 데이터 Android로 옮기기](https://data.develog.develrocket.com/upload/develog/muchan/1792206352286-hd4xz4/_____2026-10-17_114953.png)
![[Unity] 제네릭 박싱 예방](https://data.develog.develrocket.com/upload/develog/gmumdev/1792123312021-bhxx2i/_____.png)