프로그래밍/유니티
[유니티] 해상도 고정 & 빈 공간 처리
갓똥
2022. 11. 18. 01:42
728x90
반응형
1. 해상도 고정
원하는 해상도는 아래 코드에 width, height에 놓으면 된다.
void Awake()
{
Screen.sleepTimeout = SleepTimeout.NeverSleep;
int width = 1080;
int height = 1920;
float res = (float)width / height;
int deviceWidth = Screen.width;
int deviceHeight = Screen.height;
float deviceRes = (float)deviceWidth / deviceHeight;
// SetResolution 함수 제대로 사용하기
Screen.SetResolution(width, (int)(((float)deviceHeight / deviceWidth) * width), true);
if (res < deviceRes)
{
// 기기의 해상도 비가 더 큰 경우
float newWidth = res / deviceRes;
Camera.main.rect = new Rect((1f - newWidth) / 2f, 0f, newWidth, 1f);
}
else
{
// 게임의 해상도 비가 더 큰 경우
float newHeight = deviceRes / res;
Camera.main.rect = new Rect(0f, (1f - newHeight) / 2f, 1f, newHeight);
}
}
GameManager에 넣고 쓰면 된다.
쓰게 되면
위 화면은 simulator에 노트10+인데 구글링해보니 19:9 비율의 3040 x 1440이다.
이걸 강제로 9:16으로 바꿔보자.
요렇게 된다.
Canvas의 Render Mode는 Screen Space - Camera를 사용해야 한다.\
지금은 위아래 영역이 검은색이지만 잔상이 남을 수 있는데 그럴 때는
private void OnPreCull()
{
GL.Clear(true, true, Color.black);
}
해당 코드를 추가해서 해결할 수 있다.
혹은 위 아래 덮는 이미지나 다른 색상으로 덮을 수도 있다.
2. 빈 공간 처리
#region CoverImage
[Header("[Cover]")]
public RectTransform topCover;
public RectTransform bottomCover;
private void CoverInit()
{
var rect = Camera.main.rect;
topCover.anchorMin = new Vector2(0f, 1f - rect.y);
topCover.anchorMax = Vector2.one;
topCover.anchoredPosition = Vector2.zero;
bottomCover.anchorMin = Vector2.zero;
bottomCover.anchorMax = new Vector2(1f, rect.y);
bottomCover.anchoredPosition = Vector2.zero;
}
#endregion
위 아래 검은색 영역은 해당 코드로 덮을 수 있다.
728x90
반응형