안녕하세요 철사마입니다.

오랜만에 유니티 팁을 기억해 놓으려고~ 개발 포스팅을 하게 되었습니다. :)

(이미지 출처 : 구글 이미지 검색)


따지고 보면 별건 아닌데, 모를 때는 방법을 몰라 매우 궁금했던 것인데요.

바로 화면 해상도 고정 방법입니다.


예를 들어 유니티에서 화면에 보이는 모습과 핸드폰에 보이는 모습이 다를 경우가 있습니다.

특히 2D의 경우는 더 심한데 개발시 화면에 보이는 것과 핸드폰이 동일해야 개발할 때 예측이 잘 될거라서 실제 화면과 다르다면 개발할 때 참 불편할 것입니다.


분명 방법이 있을 것 같아서 여기저기 찾아보니 이런 쉬운 방법이 있더군요!


바로 SetResolution 이라는 함수를 쓰면 쉽게 할 수 있습니다. 두둥~


Screen.SetResolution


public static void SetResolution(int width, int height, bool fullscreen, int preferredRefreshRate = 0);


화면의 해상도를 전환합니다.


A width by height resolution will be used. If no matching resolution is supported, the closest one will be used.


If preferredRefreshRate is 0 (default) Unity will switch to the highest refresh rate supported by the monitor.

/preferredRefreshRate/가 0이아니면 유니티는 모니터가 지원한다면 사용하고, 아니면, 지원되는 highest중 하나를 선택할 것입니다.


웹 플레이어상에서는 사용자가 컨텐츠를 클릭한 후에 해상도가 변경됩니다. The recommended way of doing it is to switch resolutions only when the user clicks on a designated button.


On Android fullscreen controls the SYSTEM_UI_FLAG_LOW_PROFILE flag to View.setSystemUiVisibility(), on devices running Honeycomb (OS 3.0 / API 11) or later.


On Windows Store Apps, switching to non-native resolution is only supported starting from Windows 8.1 and newer.


전체화면 전환은 바로 적용되지 않습니다; 현재 프레임이 끝날 때 적용됩니다.

// Switch to 640 x 480 fullscreen

Screen.SetResolution(640, 480, true);


다른 예제:

// Switch to 640 x 480 fullscreen at 60 hz

Screen.SetResolution (640, 480, true, 60);


다른 예제:

// Switch to 800 x 600 windowed

Screen.SetResolution (800, 600, false);


See Also: resolutions property.

출처 : UNITY 스크립팅 API



좀 더 쉽게 설명을 하자면...


Screen.SetResolution(가로 픽셀, 세로 픽셀, full screen 유무, 지원되는 해상도 지정-기본 0으로 설정되어 있음);


640x480 사이즈에 Full Screen 으로 설정하고 싶다면

Screen.SetResolution(640, 480, true);

이렇게 하시면 됩니다.


주의할 점은 최초 실행시 실행되는 스크립트에 적어주셔야 정상적으로 적용이 됩니다.


그럼 테스트를 위해 몇가지 단계를 순서대로 진행해 보겠습니다. 스탭바이 스탭으로 진행되니 길어도 쉽게 읽어보심 바로 아실 것 같아요!


우선 유니티 새 프로젝트를 만드시고...


예제로 유니티에선 화면 사이즈를 720x1280으로 설정해 보았습니다.

그리고 사이즈가 꽉 차게 나오는지 양 모서리에 이미지를 위치하였습니다. 



양 모서리에 들어간 이미지는 새해라서 .. 돼지해 이미지로 했습니다. :) 이미지는 인터넷 검색으로...

새해 복 많이 받으세요 ^^



테스트를 위해서 대충 한거긴 한데.. 설명을 하자면,

Scene에서 Empty한 Game Object를 생성하시고.. 전 Canvas라고 이름을 정했습니다.

그 Object에 C# 스크립트를 하나 생성해서 붙였습니다. 전 스크립트 이름을 script.cs로 정했습니다.


script.cs 스크립트에 해상도 설정 스크립트를 추가합니다.

이 함수는 최초 실행시에 불려야 하기 때문에 Start() 보다 빠른 Awake()에 붙여 넣었습니다.


    void Awake()

    {

        Screen.sleepTimeout = SleepTimeout.NeverSleep;

        Screen.SetResolution(720, 1280, true);

        

    }


위에 Screen.sleepTimeout = SleepTimeout.NeverSleep; 코딩은 게임 실행 중 화면이 꺼지지 않게 하는 설정입니다. 참고해 주시고...



맨 위의 Rect Transform 에 나오는 사이즈는 Game View의 화면 사이즈입니다.

화면 사이즈를 720x1280으로 설정해 주시고,



Canvas Object에 script.cs 파일을 연결해 주었습니다.


그 후에 Add Component를 클릭하여 [Canvas] 와 [Canvas Scaler (Script)] 를 우선 추가합니다.


Canvas 에서는

Render Mode 에서 Screen Space - Camera 로 설정해서 메인 카메라와 동기화를 시킵니다.


Render Camera 항목에 메인 카메라를 적용 시킵니다. 


Canvas Scaler (Script) 에서는 

UI Scale Mode 에서 Scale With Screen Size로 설정하여 Canvas Object의 하위 리스트에서도 동일하게 Scale이 적용할 수 있도록 설정합니다.


그리고 스케일의 기준 값을 720, 1280으로 적어줍니다.

아래 보이는 Match는 720x1280을 벋어나는 해상도가 있을 때 어디를 기준으로 Match를 할 것인지를 결정합니다.

Width로 하면 가로, Height 로 하면 세로를 기준으로 스케일이 진행됩니다.




여기까지 설정했으면 끝입니다.

빌드를 해보고 폰에 담아보면 이렇게 나옵니다.

이미지는 대충 위치한거라 조금 오차가 있네요..;;


보시면 잘 맞지요? 이런 식으로 화면 해상도를 기준하여 작업하면 개발이 좀 더 수월해 질 거 같습니다.


혹시 다른 팁이 있으신 분은 알려주세요!

처음 개발할 때 틀을 잡는게 매우 어렵더라고요..

정보 공유해요! :)


감사합니다.!


+ Recent posts