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

[출처]

 

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) 함수를 호출합니다.

개발한 게임을 800×480 해상도에 맞게 빌드하려는 경우, 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 메서드가 동작하지 않는다./ Unity 4.0에서  SetResolution이 iOS에서도 동작)

 

 

 

 

 

 

[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

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

<문제점>

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

 

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

 

 

** 추가

http://wiki.gamegear.co.kr/mediawiki/index.php?title=Talk:Unity3d_resolution_strategy