"눈이 나쁘면 안경을 쓴댔으니 모자란 너에겐 모자를 씌워주마" – 김케장 / 동전주머니엔 동전이 들었지

20130522
폴리곤을 화면상에서 텍스처 크기대로 나오게 하기

돈이 없어서 ngui 비슷하게 직접 ui를 만들다가 텍스처가 실제 크기대로 화면에서 1:1로 나오게 해야 할 일이 생겨서 만들어 봤습니다. 별 건 아닌데 나중에 까먹고 어버버 할까 봐 여기다가 적어 둡니다. 일단 등ㅉㅏ… 아니 코드를 봅시다.

float screenHeight = ( float )Screen.height;

Vector2 scale = new Vector2( textureWidth / screenHeight, textureHeight / screenHeight ) * ( uiCamera.orthographicSize * 2.0f );

transform.localScale = new Vector3( scale.x, scale.y, transform.localScale.z );

일단 직교카메라가 있어야 하며, 크기 조정하려는 텍스처의 크기를 알아야 하고, 폴리곤의 크기는 월드 좌표로 너비와 높이 모두 1.0f 이여야 합니다. 먼저 텍스처의 크기와 화면 픽셀 높이를 가지고 텍스처가 현재 화면에서 차지하고 있는 비율(현재 직교카메라이기 때문에 화면 좌표도 됩니다.)을 계산합니다. 직교카메라의 크기(orthographicSize)는 월드 좌표에서 orthographicSize * 2.0f 이며 이를 이용해서 여기에 위에서 계산한 비율을 곱해서(다시 말하지만, 폴리곤의 너비, 높이가 1.0f 이여야 됩니다.) 크기를 계산합니다.

이렇게 해서 나온 크기를 현재 transform의 크기에 넣으면 끗. 화면 크기가 변해도 크기를 계산해서 게임화면에서는 같은 크기로 나옵니다.

2013_05_22_1
2013_05_22_2
2013_05_22_3
2013_05_22_4

윈도우에서는 버텍스 실수좌표와 텍스처 픽셀좌표 차이로 인해 픽셀이 밀리는 경우가 생기는데 그럴땐 마법의 숫자 0.5f를 사용하면 됩니다. 자세한 내용은 http://blog.daum.net/gamza-net/16 여기서 보시면 되겠습니다.

댓글 남기기 | 타닥타닥

댓글 남기기

* 표시된 곳은 반드시 입력해주세요