갓똥
나는야 프로그래머
갓똥
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 프로그래밍 (146)
      • 자바 (9)
      • 안드로이드 (2)
      • 유니티 (20)
      • C++ (38)
      • C# (56)
      • HTML (2)
      • 파이썬 (3)
      • 자료구조 (2)
      • 알고리즘 (0)
      • 문제풀이 (4)
      • 디자인 패턴 (7)
      • 카카오톡 봇 (1)
      • 엑셀 (1)
      • 기타 (1)
    • 게임 (21)
      • 테일즈위버 (0)
      • 카이로소프트 (1)
      • 순위 (19)
      • 기타 (1)
    • 일상 (13)
      • 카페 (1)
      • 방탈출 (12)
    • 기타 (6)
      • 웃긴자료 (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • 롤 골드그래프
  • 유니티 그래프
  • c# collection
  • c# 코루틴
  • 전세계 게임 매출
  • 자바
  • 게임 매출 순위
  • C# 예외 처리
  • C++ 소멸자
  • 모바일 게임 순위
  • 2020년 게임 매출
  • 게임매출순위
  • pc게임 순위
  • C++ virtual
  • pc 게임 순위
  • 강남 방탈출
  • 유니티 골드그래프
  • c# coroutine
  • 전세계게임매출순위
  • 유니티 그래프 그리기
  • C++
  • 게임 디자인 패턴
  • 글로벌게임매출
  • Unity Graph
  • C++ 상속
  • C# boxing
  • c# unboxing
  • c# Thread
  • c# delegate

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갓똥

나는야 프로그래머

[유니티] 해상도 고정 & 빈 공간 처리
프로그래밍/유니티

[유니티] 해상도 고정 & 빈 공간 처리

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
반응형

'프로그래밍 > 유니티' 카테고리의 다른 글

[유니티] 화면전환 효과 (탕탕특공대 따라하기)  (2) 2022.12.07
[유니티] XML테이블 사용하기 (2)  (0) 2022.11.08
[유니티] XML테이블 사용하기 (1)  (0) 2022.10.28
[유니티] FPS 표기  (0) 2022.10.05
[유니티] 안드로이드 번들 빌드 오류 모음  (0) 2022.09.26
    '프로그래밍/유니티' 카테고리의 다른 글
    • [유니티] 화면전환 효과 (탕탕특공대 따라하기)
    • [유니티] XML테이블 사용하기 (2)
    • [유니티] XML테이블 사용하기 (1)
    • [유니티] FPS 표기
    갓똥
    갓똥
    공부하며 알아가는 내용을 정리해 봅니다.

    티스토리툴바