▲ 구글 샤히드 후세인 PM

지난 2월 21일 삼성이 공개한 폴더블 스마트폰 '갤럭시 폴더블'은 스마트폰 업계에서 화제가 됐다. 이와 더불어 게임업계에는 또 다른 화두가 던져졌다. 접이식으로 변화하는 화면에 맞춰서 게임을 개발해야 한다는 과제가 생겼기 때문이다.

이번 GDC 2019에서 구글과 삼성은 개발자들이 폴더블 스마트폰에 대응하는 게임을 만들기 위해 필요로 하는 코드들을 공개했다. 한편으로는 이러한 과정이 아주 새로운 것은 아니며, 생각만큼 낯선 것이 아니라고 덧붙였다.

구글의 샤히드 후세인 PM은 모바일 게임을 즐기는 환경은 스마트폰 외에도 태블릿, 크롬북, 덱스 등 다양하다는 것을 지적했다. 여기에 맞춰서 게임 개발자들도 이에 맞춰 자신들의 게임이 장비에 상관없이 구동하게끔 설정해왔다. 그렇게 설정하게 하기 위해서는 각 디바이스별 특징을 생각할 필요가 있으며, 지원하는 해상도나 하드웨어 스펙 등도 고려할 필요가 있다고 덧붙였다.

▲ 갤럭시 폴더블 이전에도 이미 디바이스별로 다른 화면과 환경을 고려해야 했다

벤 게이블 개발 지원은 안드로이드의 장점으로 하나의 APK만으로도 이 각각의 환경에서 다 구동할 수 있다는 것을 꼽았다. 물론 단순히 APK를 빌드한다고 해서 모든 디바이스에서 자연히 다 맞춰서 돌아가는 것은 아니며, 각각의 기기에 따라서 변하는 것들을 고려해서 사전에 세팅을 해줘야 한다.

디바이스에 따라 달라지는 영역은 크게 스크린, 인풋, 그리고 안드로이드 버전이다. 즉 디바이스가 바뀌면서 변경되는 이 세 가지 영역에 대해서 반응할 수 있도록 설정해야 한다는 것이다.


안드로이드에서 스크린 크기나 UI의 스케일 등 스크린 구성을 변경할 때는 onConfigurationChanged() 메소드를 활용한다. 이 메소드를 통해서 해당 정보를 호출할 수 있도록 하는 것이다. 여기에 화면의 사이즈와 방향성 변경을 처리해주는 매니페스트 코드를 작성해야 한다. 동적 리사이징 처리를 할 때도 메소드는 동일하지만, 매니페스트 코드는 달라진다.


▲ 화면 설정 변화할 때의 코드와 매니페스토 코드


▲ 동적 리사이징을 적용하기 위한 코드와 매니페스토 코드

▲ 화면 모드 전환 대응을 위한 코드

앱에 화면 전환 모드를 추가하기 위해서는 매니페스트 코드를 작성하거나, 혹은 Display.getRotation()을 활용하면 된다. 그렇지만 화면을 전환할 때는 UI의 배치 및 사이즈 변화 등이 일어나는 것도 처리해줘야 한다. 구글에서는 이러한 요소들을 처리하기 위한 번들들을 제공하고 있다.

안드로이드 게임을 플레이할 때, 모바일과 태블릿은 주로 화면을 터치하는 인풋을 쓴다는 공통점이 있다. 그러나 크롬북 등에서는 마우스나 키보드를 활용하기도 하고, 일부 유저들은 조이패드를 사용하는 등 인풋이 달라지는 경우도 왕왕 있다. 이러한 변경점에 대응하기 위한 코드를 작성해줘야 한다. 안드로이드 내에는 키보드의 인풋을 입력하는 설정이 되어있는 만큼, 이를 활용하기 위한 구성 변경 부분만 개발자들이 작성하면 된다. 마우스는 클릭과 마우스 포인터의 움직임이 각각 인풋되는 만큼, 이 두 경우에 대한 메소드를 따로 작성한다.


▲ 키보드 대응용 매니페스토 코드와 코드

▲ 마우스 대응용 코드

키보드의 인풋을 생성할 때 모바일 환경에서 터치로 진행됐던 것들을 각각 다 대응하도록 해야 한다. 그렇게 하기 위해서는 우선 어떤 종류의 키가 어떻게 사용될지 분류해두는 것이 좋다. 예를 들어 스킬 키, 방향 키, 메뉴에 들어갔을 때 사용하는 키 등을 기본적으로 구현할 필요가 있다. 그리고 유저 편의를 위한 커스텀 키 세팅 등도 고려하면 좋다.

그 외에도 안드로이드 게임을 개발할 때 유의할 것은 접근 권한과 하드웨어, 테스트다. 위치 정보를 기반으로 하는 AR 게임의 경우 GPS나 BFC, NFC에 접근을 요구하기 때문에 특히 우선적으로 이 부분을 구현해야 한다. 또한 안드로이드의 다양한 스펙에 맞추고, 이를 테스트하는 과정도 필요하다.

▲ 애쉬 샤르마 삼성 전자 서포트 엔지니어

삼성 전자의 애쉬 샤르마 서포트 엔지니어는 이 중 갤럭시 폴더블에 적용하기 위해서 필요한 것들을 골라서 설명했다. 갤럭시 폴더블은 기존보다 더 큰 화면에, 다중 창을 지원한다. 그리고 이에 맞춰 좀 더 높은 퍼포먼스와 끊김이 없는 앱 실행 환경을 구축하고자 했다.


즉 갤럭시 폴더블용 게임을 만들기 위해서는 화면의 최대 비율을 우선 고려해야 하고, 노치 디자인에 맞춘 디스플레이 컷 아웃을 지원하기 때문에 이에 대한 준비도 필요하다. 화면 모드가 더 자유자재로 변하는데, 이러한 변화에도 앱이 멈추지 않도록 코드를 짜야 한다. 그리고 다중 창을 지원하는 만큼, 이를 활용했을 때 화면창의 변화도 염두에 두어야 한다.

갤럭시 폴더블의 최대 화면비는 21:9로, 여기에 맞춰서 앱의 디스플레이 비율을 이에 맞출 필요가 있다. 이를 구현하기 위해서는 지정 SDK 버전을 선언하고, 여기에 resizeableActivity를 선언해줘야 한다. 다만 이는 안드로이드 8.0, API 레벨 26 이상에서만 사용 가능하다. 그리고 최대 화면 비율을 선언하는데, 이때 밸류값은 2.4까지 지정하고 레터박스는 2.4 이상으로 지정한다.


▲ 앱에서 갤럭시 폴더블의 풀스크린 모드를 지원하게 하려면 이와 같은 코드를 짜고, 밸류값을 줘야 한다

디스플레이 컷 아웃에 대응하기 위해서는 모서리 부분이 가려지는 상황과, 그렇지 않은 상황의 레이아웃을 디스플레이 컷 아웃 오브젝트를 별도로 지정하고 검색해서 호출하는 방법을 활용하게 된다.




한나웅 삼성 스태프 엔지니어는 갤럭시 폴더블이 접어서 사용할 때는 외부 화면을 쓰다가, 펼쳤을 때는 안쪽 메인 화면을 쓰는 방식이라고 설명헀다. 즉 이에 대응하기 위해서는 별도의 레이아웃 지정을 해줘야 하고, 스크린의 사이즈에 맞춰야 한다. 다만 접었을 때 별도의 특별한 이벤트나 API 상에서 무언가가 발생하지는 않는다. 다만 스크린사이즈와 가장 작은 스크린 사이즈, 스크린 레이아웃 환경 설정만 바뀌게 된다.


동적 리사이징은 screenSize와 smallestScreenSize, screenLayout을 매니페스트 코드에서 선언한 뒤에 설정을 직접 변경해줘야 한다. 다중 창 지원은 갤럭시 폴더블에서 지원할 뿐만 아니라, 다음 버전 안드로이드 OS에서 필수로 적용될 것이라고 기대되는 만큼 미리 적용해두는 것도 좋은 방법이라고 덧붙였다.


게임로프트의 알레한드로 어바노 수석 그래픽 소프트웨어 개발자는 '아스팔트 9'를 갤럭시 폴더블용으로 테스트하면서 느꼈던 포인트를 짚었다. 우선 폴더블 화면에 맞춰서 UI를 구성해야 했는데, 이때 다른 것보다 중요했던 것은 화면 비율과 DPI의 변화에 맞춰 설정과 레이아웃을 변경하는 것이었다. 이때 주의할 점은 레이아웃 단위에서 픽셀 등 절대값을 사용하기보다는 비율, 앵커 등의 상대값을 주로 사용해야 한다는 점이었다. 또한 레터박스를 맞추는 과정이 현 단계에서는 꽤 까다로웠기 때문에 꼭 필요한 부분만 추가하는 것이 좋다고 조언했다. 그 외에도 레이아웃 변경에 따라 UI 디자인이 바뀌는 것도 염두해둬야 할 필요가 있다고 덧붙였다.


마지막으로 구글의 후세인 PM은 앞으로도 안드로이드의 다양한 환경에 맞춰서 개발자들이 자신들의 게임을 개발할 수 있도록 프로파일링 툴, 에뮬레이터 개선, 게임컨트롤러 대응 및 개발 툴을 지원할 것이라고 밝혔다. 또한 더 큰 화면의 안드로이드 환경에 대응하는 게임과 갤럭시 폴드용 게임 개발에 좀 더 자세한 정보를 얻으려면 안드로이드 개발 지원 페이지갤럭시폴드 GDC 페이지를 확인해달라고 덧붙였다.



! GDC2019 최신 소식은 박태학, 정필권, 원동현, 윤서호 기자가 샌프란시스코 현지에서 직접 전달해드립니다. 전체 기사는 뉴스센터에서 확인하세요. ▶ GDC 뉴스센터: http://bit.ly/2O2Bi0z