상세 컨텐츠

본문 제목

[팁] 디스플레이 화면 해상도 비율 구하는 방법 관련

프로그래밍 관련/프로그래밍 관련팁

by AlrepondTech 2020. 12. 26. 02:23

본문

반응형

 

 

=======================

=======================

=======================

 

 

 

 

 

출처: www.devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=64876

해상도의 가로세로 비율에 따라 화면 구성 바꾸기

 

NGUI로 제작되었으며, 기본적으로 스프라이트를 화면에 꽉 차는 크기의 배경으로 쓰고

그 뒤에 라벨이나 버튼 같은 것들이 구성되어 있습니다.

이 배경의 크기에 따라서 라벨이나 버튼이 따라다니게 하는건 Anchor로 가능한데,

이 배경에 해당하는 스프라이트의 크기(Dimension)를 현재 디바이스의 해상도에 일치시켜야 합니다.

Screen.width와 Screen.height로 해상도의 크기를 알아내어 각각 스프라이트의 Dimension을 변경시켜주려고 하는데,

 

Screen.width와 Screen.height를 찍으면 해당 디바이스의 크기가 아니라 유니티 게임씬 내에 출력되는 Using resolution이라는 이상한 값이 찍혀 나옵니다.

당연히 그 크기로 변경한 스프라이트의 크기도 제가 원하는 크기가 아닙니다.

 

혹시 디바이스의 해상도를 구하는 함수가 Screen.width와 Screen.height가 아닌가요?

 

Screen.width와 Screen.height만 제가 원하는 대로 찍는다면 이건 해결이 가능할 것 같은데,

문제는 이러한 씬이 수십 개가 넘습니다.

 

모든 씬을 다 수정하기에는 작업시간이 너무 방대해서, 혹시 스크립트를 통해 이 문제를 일괄적으로 해결할 수 있는 방법을 아시는 분은 가르쳐주시면 감사하겠습니다.

 

(가장 이상적인 것은, NGUI의 UICamera의 가로세로 비율을 제 임의로 조절할 수 있는 것입니다.)

-----------------------------------------------------------------------------------------------------------------------------------------------------

http://phiru.tistory.com/173 등등 구글에 검색하시면 다양한 정보 많이 나오네요

-----------------------------------------------------------------------------------------------------------------------------------------------------

http://docs.unity3d.com/ScriptReference/Screen.SetResolution.html

// Switch to 640 x 480 fullscreen
Screen.SetResolution(640, 480, true);

해상도 변경 을 이런식으로 적용 하긴 하는데 이걸 원하시는건가 잘 모르겠네요.

-----------------------------------------------------------------------------------------------------------------------------------------------------

에디터 상에서는 screen.width, height 값이 Using resolution 값이 나타나실 겁니다.
디바이스 상에서는 정상적으로 값이 나타나실 거에요.
저같은 경우 ngui의 앵커값을 이용해서 화면 사이즈에 대응시킵니다. ( 앵커기준을 패널로 해서 대응을 top -> top, left -> left, right -> right, bottom -> bottom으로 설정하시고 값은 전부 0으로 하시고 widget의 Aspect를 Free로 해보세요 )

 

 

 

=======================

=======================

=======================

 

 

 

반응형

 

728x90

 

 

 

 

출처: http://striban.tistory.com/10

 

안드로이드는 기기마다 해상도가 제각각이다. 그에 맞추어 어플을 개발하는 것도 정말 귀찮은 일이다.

아트릭스의 경우 960x540의 qHD 이다. 16:9의 FullHD의 1/4이란 뜻인데...

문득 다른 기기들의 화면 해상도 비율은 어떻게 되는지 궁금해졌다.

 

최대공약수를 이용하면 간단히 계산이 되는데...

엑셀에서 GCD로 구한다음 해상도를 나누어주면 된다.

 

가장 흔한 800x480의 경우는 5:3

아트릭스같은 960x540의 경우는 16:9

갤럭시노트같은 1280x800의 경우는 8:5

태블릿류 1024x600의 경우는 128:75 (ㅡㅡ; 이건뭐지~)

모토로이 854x480의 경우는 427:240 (ㅡㅡ;; 이건뭐~ 함해보자는건지...)

 

안드로이드의 해상도는 정말 총체적 난국이라는 말 밖에 안나온다.

 

어찌되었든,

이런 쓸데없는 짓을 하다 안드로이드로

기기별 화면 해상도 비율을 구해보면 어떨까해서 소스를 만들어 보았다.

 

Integer rwidth, rheight, hgt, max, min, gcd, temp, war, har;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
     
    DisplayMetrics disp = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(disp);
    rwidth = disp.widthPixels;            // 화면의 가로 해상도 구하기


    rheight = disp.heightPixels;          // 화면의 세로 해상도 구하기
 if(rwidth < rheight) {                // 화면의 가로, 세로 크기 비교
        max = rwidth;                     // 큰쪽을 max로
        min = rheight;
    } else {
        max = rheight;
        min = rwidth;
    }
     
    while(max%min != 0) {                 // 나머지가 0이 될 때까지
         
        temp = max % min;                 // max/min의 나머지를 temp로
        max = min;                        // min이 나눠지는 수로
        min = temp;                       // temp가 나누는 수로 바뀌어 다시 나머지 계산
         
        }
     
    gcd = min;                            // 최종적으로 나온 나누는 수가 바로 최대공약수
     
    war = rwidth/gcd;                     // 화면의 가로/최대공약수 = 가로비율
    har = rheight/gcd;                    // 화면의 세로/최대공약수 = 세로비율

 

 

 

=======================

=======================

=======================

 

 

 

 

 

*기타관련링크

- dhna.tistory.com/104

- readystory.tistory.com/111

- namu.wiki/w/%EC%8A%A4%EB%A7%88%ED%8A%B8%ED%8F%B0/%ED%99%94%EB%A9%B4%ED%81%AC%EA%B8%B0

- jimnong.tistory.com/374

- digxtal.com/insight/20100909/%EC%A0%81%EC%A0%95-%EC%8A%A4%ED%81%AC%EB%A6%B0-%EC%82%AC%EC%9D%B4%EC%A6%88-%ED%95%B4%EC%83%81%EB%8F%84%EC%97%90-%EB%8C%80%ED%95%B4/

 

 

 

=======================

=======================

=======================

 

 

 

반응형


관련글 더보기

댓글 영역