본문 바로가기
GAME/개발

Unity - Device Simulator 와 Application.platform

by 차르스 2021. 11. 7.

Unity 에 Android Studio 처럼 모바일 에뮬레이터 기능이 추가되었다. 다만, 유니티는 에뮬레이터라고 하지 않고 Device Simulator 라고 하는 것 같다. 입력 관련 코딩을 하다가 Unity Play mode 에서는 잘 되는데 실제 모바일 기기에서만 발생하는 버그가 생겼는데 매번 빌드하기에는 시간이 오래 걸려서 이 Device Simulator 를 사용해보기로 했는데 수정해도 반영이 안되는 것 같아서 작은 착각(?)이 있었다.

 

이전 코드에서는 아래처럼 전처리기를 사용해서 컴파일 단계에서 분기되게 코딩했었는데 Unity Device Simulator 도 UNITY_EDITOR 로 인식된다. 컴파일 단계에서는 에디터에서 돌기 때문에 Device Simulator 를 돌려도 결국엔 에디터로 컴파일된 걸 실행. 따라서, #else 구문에 Device Simulator 에서 돌거라고 생각하고 넣은 것들은 허공에다가 발길질 한 것 과 같았다.

 

 #if UNITY_EDITOR

   // Editor 에서만 도는 코드

 #else

  // Editor 아닌 다른 기기에서 도는 코드

 #endif

 

Device Simulator 로 실제 모바일 기기 관련 코드를 실행해보고자 한다면 전처리 구문이 아니라 Application.platform 을 활용해야 한다.

 

ex) if ( Application.platform == RuntimePlatform.Android ) { // 런타임 시 Android 라면 

    else if ( Application.platform == RuntimePlatform.IPhonePlayer ) { // 런타임 시 iphone 이라면...

 

런타임에서 호출하므로 Unity Device Simulator 에서 설정한 모바일 기기 모델에 따라서 제대로 분기되는 걸 확인할 수 있다. 다만, Application.platform 은 런타임에서 호출될 때마다 자원을 소비하니 전처리로 확실히 분기할 수 있다면 #ifdef 전처리로 플랫폼에 따라 구분 코딩하는 게 좀 더 효율적이기는 하다.

댓글