IT_Games/Unity3D

[펌] [UNITY] UI 해상도 대응하기!

JJun ™ 2013. 6. 20. 16:45

 


[출처]

 

1. http://www.devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=21441&sca=&sfl=wr_subject%7C%7Cwr_content&stx=plane+gui&sop=and¤tId=44

 

2. http://moure95.egloos.com/961500

3. http://blueasa.tistory.com/918


 


 

[픽셀 사이즈로 Plane Scale 계산 하는 방법 ]

 

현재 3D 카메라에서의 오브젝트 스크린 width, height 를 구하고,

이미지와의 비율에 맞게 스케일링한다.


 

 

_savedMesh : Plane 의 메시
 tex : 2D 이미지
 p_obj : Plane 오브젝트 
 


 

 

 Vector3 vWorld1 = p_obj.transform.TransformPoint(_savedMesh.vertices[0]); 
 Vector3 v1 = thisCamera.WorldToScreenPoint(vWorld1); 
 Vector3 vWorld2 = p_obj.transform.TransformPoint(_savedMesh.vertices[

                                                                                          _savedMesh.uv.Length - 1]); 
 Vector3 v2 = thisCamera.WorldToScreenPoint(vWorld2); 
 float rateX = tex.width / (v2.x - v1.x); 
 float rateY = tex.height / (v2.y - v1.y); 
 p_obj.transform.localScale = new Vector3(p_obj.transform.localScale.x * rateX + 0.001f,

                              p_obj.transform.localScale.y * rateY, p_obj.transform.localScale.z);

 

 

 

 

 


 

 

 

 

모바일 개발환경에서 게임개발시의 해상도를 기기에 넣고 돌려보면
해상도가 맞지 않아 화면이 짤리거나, 작게 보이게 되는 경우가 생깁니다.
그렇기에 기기의 해상도에 맞춰 설정을 해줘야 하는데요.
 
안드로이드와 IOS의 설정 방법이 다릅니다.
 
[Android]
스크립트에서 Screen.SetResolution(int width, int heignt, bool bFullScreen) 함수를 호출합니다.
개발한 게임을 800x480 해상도에 맞게 빌드하려는 경우, SetResolution(800 480, true) 하시면 됩니다.
하지만 기기마다 일일이 이런 설정을 해줄 수 없는지라, 대부분의 개발자분들이 개발 시에 해상도를

비율로 설정하여 개발하시고 후에 빌드할 때, 해상도 비율에 맞춰 화면에 딱 맞게 보이도록 하고 있습니다.

예를 들어, 2:3 비율로 개발 후에 빌드시, SetResolution(Screen.width, Screen.width/2*3, true)라고

하시면 됩니다. (※ SetResolution 메서드가 안 먹는 단말기도 있다.)

 

 
[IOS]
IOS는 SetResolution함수가 먹히지 않아, 내부 설정으로 셋팅을 해줘야 합니다.
File >> Build Settings >> Player Settings >> Other Setting 으로 들어갑니다.
거기서 Target Resolution의 Native, Standard, HD 중에서 원하시는 옵션을 선택해주시면 됩니다.
Native는 어떤 해상도에서든 개발했던 해상도로 출력됩니다.
2:3, 16:9 등의 비율로 잡고 개발하셨어도 크기는 정해져있기에 해상도별로 다른 크기를 보여줍니다.
Standard는 낮은 해상도에서 개발한 것을 해상도가 큰 기기에서도 딱 맞는 크기로 보여줍니다.
예를들어, 2:3 환경에서 개발한 것을 16:9 의 고해상도 화면에서도 2:3으로 딱 맞게 출력해줍니다.
HD는 Standard와는 정반대로 높은 해상도에서 개발한 것을 낮은해상도에 맞게 줄여주는 듯 합니다.
HD는 써본적이 없어서 확실하진 않지만, Unity Answers에서 나온 정보에 따르면 맞는 것 같습니다.

(※ Unity3D 4.0 이하 버전에서는 SetResolution 메서드가 동작하지 않는다.)

 

 


 

 

 

 

[NGUI 해상도에 맞게 UI Scale]

 

1) NGUI의 Panel에 UIStretch 추가

    (조절이 필요한 곳에 모두 넣는다. 패널이 여러개면 여러 패널에 모두 순서대로 진행)

 

2) Ui Camera에 NGUI 카메라 추가(Drag & Drop)

3) Style : Both(카메라에 맞춰서 스케일이 조절돼버림. 스케일 수정 안됨)

4) 스케일이 직접 조절이 안되므로 Relative Size를 조절함

5) Relative Size 조절(결과적으로 패널의 스케일 값이 1이 나오게 Relative Size 값을 넣는다.)

   X = 패널의 1 / Scale.X

   Y = 패널의 1 / Scale.Y


<문제점>

- 해상도에 맞게 늘어나긴 하지만 UI 크기가 늘어나거나 줄어드는 문제가 있음.

 

※ EZGUI는 ezgui + sm2 를 구입해서 pixel perfect 사용!

 

[참조 글]

뀨니 2012.12.28 09:23:58 댓글달기

저도 같은 문제로 게시판 뒤지다가 어떤분것 보고 도움을 받았는데요. NGUI 쓰신다면 NGUI 에 있는 스크립트를 사용하시면 됩니다.
UIStretch 스크립트를사용해서 해상도에따라 셋팅값에 따라 해상도에 맞춰 비율적으로 강제적으로 늘릴 수 있습니다.
예를 들자면 
UIStretch를 패널에 추가하시고, UI Camera에 NGUI 카메라를 넣으시고, Style을 Both로 맞추시면 카메라에 맞춰 늘어나게 되는데요.
여기서 크기를 Relative Size로 셋팅해주시면 됩니다. 
저같은 경우는 엄청나게 커져버려서 X = 0.00085 Y = 0.00125 뭐 이런식으로 맞췄습니다.


참조글 링크 : http://devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=23789&page=0&sca=UNITY&sfl=wr_subject%7C%7Cwr_content&stx=UIStretch&spt=0&page=0¤tId=44#c_23991