본문 바로가기
UNITY/팁

[UNITY] 해상도 유지를 위한 레터박스 구현 (feat.UI 잔상 해결)

by DDongYeop 2024. 8. 22.
728x90

레터박스란?

좌우로 길거나, 위아래로 긴 화면을 비율을 맞추기 위해 검정 화면으로 가리는 행위. 

 

 

 

Rect를 가져오고, 비율을 맞춰줍니다. 

Rect rect = _camera.rect;
float scaleHeight = ((float)Screen.width / Screen.height) / (_yRatio / _xRatio);
float scaleWidth = 1 / scaleHeight;

 

 

맞춘 비율을 Rect 변수에 적용해줍니다. 

if (scaleHeight < 1f)
{
    rect.height = scaleHeight;
    rect.y = (1f - scaleHeight) / 2;
}
else
{
    rect.width = scaleWidth;
    rect.x = (1f - scaleWidth) / 2;
}

 

 

이후 카메라에 적용해줍니다. 

_camera.rect = rect;

 

 

카메라가 프레임을 렌더링하기 전에 호출됩니다.

private void OnPreCull()
{
    GL.Clear(true, true, Color.black);
}

 

 

아래와 같이 UI 잔상이 남는 것을 볼 수 있다. 

 

 

Canvas 설정을 Screen Space - Camera로 변경하면 해당 문제가 고쳐지는 것을 볼 수 있다. 

 

 

아래처럼 해결 된다 !

728x90

댓글