본문 바로가기
Unity3D

해상도 대응하기

by CodeDiver 2014. 7. 30.

Talk:Unity3d resolution strategy

자료조사 중...

NGUI

최상위 객체에 UIPanel과 함께 UIStretch 컴포넌트를 추가. 컴포넌트 속성을 통해 UI 스케일을 조절할 수 있다.

  • None: 아무것도 안함. 원본 크기로 출력. (X,Y 스케일값 모두 1)
  • Horizontal: 폭만 해상도에 따라 늘려준다. (Y 스케일값 1유지)
  • Vertical: 높이만 해상도에 따라 늘려준다. (X 스케일값 1유지)
  • Both : 폭과 높이 모두 해상도에 따라 늘려준다.
  • BasedOnHeight : Vertical 처럼 해상도를 변경해준다. 단, 원본 객체의 X,Y축 비율을 그대로 유지시켜주므로 이미지가 찌그러져서 출력되지 않는다.


  • 1안. UIStretch Style을 BasedOnHeight로 하여 원복객체의 이미지 비율을 유지한채로 스케일처리. 그리고 UIAnchor를 이용하여 정렬처리. 높이 기준으로 스케일하므로 원래 해상도보다 세로가 지나치게 긴 해상도에서 실행하는 경우에는 Portrait<->Landsacpe모드를 변경하여 대응한다. 정렬 방식의 UI구성이 어려우면 이미지 레터박스를 만들어서 배치하도록 한다.

BaseOnHeight만 지원하는게 이상할 수 있지만 Portrait<->Landsacpe모드로 변경하면 같은 이야기가 되므로 하나의 옵션만 있어도 된다.

  • 2안. UIStretch Style을 Both라 하고 카메라 View port를 원복 가로/세로 비율로 조절하면 원본 제작 해상도와 100% 동일하게 UI구성이 가능. 하지만 검은색 레터박스가 생기므로 비추

2D Toolkit

카메라 객체에서 Auto Scale 옵션을 수정

  • Fit Width : 해상도 비율은 유지한채로 Width 기준으로 스케일
  • Fit Height : 해상도 비율은 유지한채로 Height 기준으로 스케일. -> NGUI의 BasedOnHeight와 같다.
  • Stretch To Fit : 해상도에 꽉차게 스케일


Android

각각의 안드로이드 해상도에 맞춰 일일히 레이아웃을 대응하기는 힘들다. 안드로이드는 각 기기를 sizes와 densities로 구별하여 레이아웃을 따로 조절할 수 있는 기능을 제공한다. 기기의 해상도는 미묘하게 가로/세로 비율이나 pixel밀도가 틀린데 이것을 카테고리화하여 추상화한 것이다. 사용자는 추상화된 종류대로만 UI를 구성하고, 나머지는 system이 알아서 맞추도록 하면 된다.

App이 각 기기의 density에 상관없이 동일한 사이즈를 유지하고 싶은 경우가 있다. 기기에 따라 사이즈가 틀려진다면 사용성에서 문제가 발생할 수 있다. 안드로이드는 px단위가 아닌 dp units단위로 이미지를 지정하는 경우 기기에 맞춰서 스케일을 자도으로 해준다. 스케일시에 이미지가 흐릿하게 보일 수 있는데 그 문제를 피하기위해서 각 density에 맞는 리소스를 따로 제공해주는 것이다.

결론: 안드로이드에서 제공하는 추상화된 기기 사이즈별로 레이아웃을 따로 만들고, 스케일했을때 흐릿함을 방지하기 위한 사이즈별 이미지를 제작하면 된다.


결론은?

  • 1. 해상도별로 다른 레이아웃을 제공하기
    • 가장 이상적인 방법, 하지만 비용이든다
    • 해상도별로 다른 이미지 리소스 제공하기
      • 해상도별로 다른 레이아웃을 제공하려면 리소스를 따로 가져가는 것이 옳다.
      • 기본 이미지자체가 크기가 크면 여러 해상도에서 출력해도 뭉개지는 현상이 없을 것이다
  • 2. 여러 해상도를 모두 처리할 수 있는 하나의 레이아웃을 제공하기
    • 비용이 적다. 하지만 해상도 비율이 상이할 경우 품질이 낮을 수 있다.
    • UI 배치를 절대좌표가 아닌 상대 좌표로 구성한다
    • 작업 해상도와의 비율리 상이할 경우를 대비해서 레터박스 처리를 구상한다.(뷰포트 조절이 아닌 이미지를 레터박스를 배치하면 자연스럽게 만들 수 있다
    • 하나의 레이아웃이 불가능한 경우도 있다. 패드용 앱이 갤럭시와치에서 돌아간다면? 이경우에는 분할할 수 밖에 없다. 혹은 지원기기에서 빼버리면 된다
    • 즉 하나의 레이아웃을 제공하다는 의미는 반드시 하나를 쓴다는 의미보다는 최대한 범용적인 레이아웃을 소수로 가져간다는 의미로 봐야 한다.
  • 3. 해상도별로 원본 이미지 크기를 스케일할것인지 크기 그대로 출력할지 여부
    • 해상도와 실제 액정의 크기에 따라 유저의 사용성이 틀려진다. 가장 이상적인 것은 안드로이드 시스템 처럼 여러 기기를 카테고리와 한후 레이아웃벼롤 다른 크기의 UI를 제공하는 것이다.
    • 비용문제가 있으므로 하나의 범용성 있는 레이아웃을 제공할 수 밖에 없다.
      • 너무 작게만 만들지 않으면 대부분 처리 가능하다. 작지않게 만든후 각 해상도에 따라 가로/세로 비율을 유지한채로 스케일 처리한다.
  • 4. 하나의 레이아웃에서 이미지의 크기 / 이미지의 위치 문제
    • 유저 사용성으로 따지만 해상도별 레이아웃을 여러개 가져가는게 맞지만 비용문제로 그럴 수 없다. 크기가 커지는건 큰 문제가없지만 작아지면 사용 자체가 힘들어지므로 적당히 큰 크기로 가져가도록 한다.
    • 크게 스케일되는것을 대비하여 UI 이미지들은 크기를 크게 만들어서 쓴다.
    • 좌표는 상대 좌표를 사용하면 대부분의 해상도에서 소화 가능하다.


'Unity3D' 카테고리의 다른 글

Admob 광고 붙이기 - 방법2  (0) 2014.07.31
Admob 광고 추가하는 방법  (0) 2014.07.31
[NGUI] ScrollView 만들기 (v3.5.2 이상)  (0) 2014.07.30
2D 게임 동영상 강좌 - 영어  (0) 2014.07.08
2D 게임제작 강좌 - PDF  (0) 2014.07.07