Android 기기는 다양한 모양과 크기로 제공됩니다. 휴대전화, 태블릿, PC, TV, 자동차, XR 헤드셋 등 어디서나 플레이할 수 있도록 지원하여 게임의 도달범위를 확장하세요. 여기에서 다음을 학습합니다.
- 마우스 및 키보드 지원을 통해 PC 및 ChromeOS의 플레이어에게 게임을 제공하고 대형 화면 기기에서 플레이 가능성을 개선하는 방법
- 게임패드 통합을 통해 가장 열정적인 플레이어의 위치에서 그들에게 다가가는 방법
- 이동 중에도 정확하고 반응이 빠른 게임플레이를 위해 스타일러스 지원을 추가하는 방법
- TV 컨트롤러를 지원하고 플레이어가 보유한 가장 큰 화면인 TV를 활용하는 방법
- 입력 방법 간에 전환할 시점에 관한 설계 고려사항
- 크로스 플랫폼 게임에서 플레이어의 입력 환경설정을 지원하기 위해 취하는 조치
- 그 외에도 다양한 기능이 있습니다.
자동 호환성
Android는 가능하면 자동 비터치 호환성을 제공합니다. 예를 들면 다음과 같습니다.
dispatchTouchEvent
/onTouchEvent
: 클릭이나 스타일러스 입력 시에도 모션 이벤트로 응답합니다. 즉, 도구 유형을 선택하지 않으면 터치 처리 로직이 마우스와 스타일러스에서 작동해야 합니다.- 일부 처리되지 않은 게임패드 및 TV 컨트롤러 이벤트가 키보드 이벤트로 다시 내보내집니다.
Play 게임즈 및 ChromeOS와 같은 PC와 같은 폼 팩터는 기본적으로 마우스 클릭에서 터치를 생성합니다. 대체할 터치 스크린이 없을 수 있으므로 기본 수준의 호환성을 제공합니다.
Play 게임즈 및 ChromeOS와 같은 PC와 유사한 폼 팩터는 기본적으로 마우스 이벤트가 아닌 터치 이벤트를 생성하여 터치스크린 입력을 예상하는 게임과의 호환성을 극대화합니다.
최상의 사용자 환경을 위해 자동 호환성에 의존하는 대신 터치가 아닌 입력에 대한 직접 지원을 구현하세요.
모든 폼 팩터 지원
Android는 점점 늘어나는 기기에서 실행됩니다. 플레이어가 휴대전화를 대형 화면 태블릿으로 펼치거나, Android 지원 TV를 켜거나, Chromebook에서 Android 게임을 열거나, 충전 중일 때 자동차에서 빠른 게임을 실행하든, 그 어느 때보다 다양한 장소와 디스플레이에서 플레이어의 참여를 유도할 수 있습니다. 플레이어가 있는 곳에서 게임을 플레이할 수 있는지 확인하면 됩니다.
폼 팩터 | 일반적인 기본 입력 | 터치스크린 | 마우스 및 키보드 | 게임패드 | 스타일러스1 | 5방향 D패드 |
---|---|---|---|---|---|---|
전화 | 터치스크린 | 예 | 예 | 예 | 예 | 예 |
대형 화면 | 터치스크린 | 예 | 예 | 예 | 예 | 예 |
PC2 | 마우스 및 키보드 | 아니요 | 예 | 예 | 아니요 | 아니요 |
ChromeOS3 | 터치패드, 마우스, 키보드 | 가끔 | 예 | 예 | 예 | 예 |
TV | 5방향 D패드 | 아니요 | 예 | 예 | 아니요 | 예 |
Cars4 (Automotive OS) |
터치스크린 | 예 | 예 | 예 | 아니요 | 예 |
보기5 | 터치스크린 | 예 | 아니요 | 아니요 | 아니요 | 아니요 |
이 표는 각 폼 팩터에서 예상되는 입력을 강조 표시하여 새로운 입력 메커니즘 지원의 우선순위를 지정하는 데 도움이 됩니다. 다음 사항에 유의하세요.
- 기본 입력 메커니즘을 하나만 두지 마세요. 이렇게 하면 의도치 않게 비접촉 캠페인의 도달범위가 제한될 수 있습니다. 예를 들어 대부분의 플레이어는 마우스와 키보드로 ChromeOS 게임을 플레이하고 싶어 하지만 기기 프로필에 따라 터치 스크린 지원을 원하는 플레이어도 있을 수 있습니다.
- 입력 메커니즘을 폼 팩터에 고정하지 마세요. Android는 다양한 주변기기와 호환되며 하이브리드 기기가 점점 더 인기를 얻고 있습니다. 휴대전화 빌드에서 키보드 지원을 삭제하면 플레이어에게 분리형 키보드와 함께 제공된 태블릿이 있는 경우 게임이 불완전하게 느껴질 수 있습니다.
마우스 입력
플레이어의 가장 크고 몰입도 높은 화면은 ChromeOS 노트북, Android 태블릿, PC 등 Android를 실행 중일 수 있습니다. 플레이어는 이러한 기기에서 마우스로 게임을 할 수 있을 것으로 기대하는 경우가 많으며, 지원을 추가하면 플레이어 참여도를 높일 수 있습니다. Android는 다음을 비롯하여 데스크톱 운영체제에 공통적인 일반적인 기능을 지원합니다.
- 왼쪽, 오른쪽, 가운데 클릭과 뒤로, 앞으로와 같은 추가 버튼 지원
- 스크롤 휠 감지
- 마우스 움직임의 절대 또는 상대 (포인터 캡처라고도 함) 보고
- 맞춤 포인터 아이콘을 정의하는 기능
다음에 대한 폼 팩터별 가이드가 있습니다.
터치패드 입력
Android의 터치패드 입력 캡처는 마우스 지원과 약간 다릅니다. requestPointerCapture()
를 호출하면 패드의 터치에 대한 원시 액세스를 요청하게 됩니다. 즉, 터치스크린에서 멀티 터치 이벤트를 수신하는 것과 동일한 방식으로 각 터치에 대한 이벤트를 수신하지만, 좌표가 디스플레이의 좌표 공간이 아닌 터치패드의 좌표 공간에 있다는 점을 제외하고는 동일합니다. 이 모드에서는 Android의 내장 터치패드 동작 감지 및 손바닥 필터링이 사용 중지됩니다. 예를 들어 사용자가 패드에서 한 손가락을 움직이면서 동시에 왼쪽 하단에 엄지손가락을 놓고 클릭할 준비를 하고 있다면 게임에서 로직에 사용할 손가락의 움직임을 결정해야 합니다 (예: 카메라 이동).
즉, 터치패드가 내장된 게임패드는 터치 스크린과 마찬가지로 강력한 동작 기반 입력에 사용할 수 있습니다.
포인터 캡처 중에 플레이어가 마우스를 사용하고 있는지 아니면 터치패드를 사용하고 있는지 확인하려면 InputDevice.SOURCE_TOUCHPAD
의 InputDevice#getSources()
또는 MotionEvent#getSource()
에서 소스 값을 확인합니다.
키보드 입력
키보드 지원은 거의 모든 Android 기기에서 제공됩니다. 개발하는 게임의 종류에 따라 게임에 키보드 인식을 추가하면 게임에 대한 접근성을 높여 플레이어층을 늘리거나 게임을 더 몰입도 높고 직관적으로 플레이할 수 있도록 하는 등 다양한 이점을 얻을 수 있습니다.
키보드 지원으로 게임을 개선하는 일반적인 방법은 다음과 같습니다.
- 터치가 불가능한 기기의 경우 멀티터치 메커니즘을 키보드에 매핑해야 합니다. 이동 및 점프와 같이 두 번 이상 동시에 터치해야 하는 게임의 경우 이러한 작업을 키보드 누르기에 매핑하여 대형 화면 및 터치가 불가능한 화면에서 플레이 가능성을 개선할 수 있습니다.
- 키보드로 메뉴를 탐색할 수 있도록 합니다. 메뉴 및 정적 게임플레이 요소에 화살표 키와 Enter와 같은 버튼 탐색을 추가하면 TV에서 게임을 플레이할 수 있고 모든 폼 팩터에서 접근성을 개선할 수 있습니다.
- 화면 작업의 단축키를 추가합니다. 플레이어가 화면에서 터치할 수 있는 모든 항목을 키보드 작업에 매핑합니다. 전략 게임에서 유닛을 선택하거나 액션 게임에서 인벤토리 슬롯을 활성화하는 등의 작업에 빠르게 액세스할 수 있으면 플레이어가 게임에 몰입할 수 있습니다.
QWERTY 키보드가 꽤 일반적이지만 인기 있는 다양한 레이아웃이 있으며 한 레이아웃에서 단일 키 누르기로 입력되는 일부 문자가 다른 레이아웃에서는 코드일 수 있습니다.
게임에서 키의 상대적 위치를 사용하여 작업을 실행하는 경우(예: 화살표 키처럼 W, A, S, D를 사용하여 이동) InputDevice.getKeyCodeforKeyLocation()
를 사용하여 QWERTY 키의 위치를 KeyEvent.getKeyCode()
의 키 코드에 매핑합니다. 플레이어의 레이아웃이 변경되면 onInputDeviceChanged()
가 호출됩니다.
게임에 텍스트 항목을 추가할 때 GameActivity의 TextInput은 게임 내 텍스트 렌더링 엔진을 계속 사용하는 동시에 IME 입력, 발음 구별 부호 또는 기타 지역별 레이아웃 변형을 안정적으로 처리하는 메커니즘을 제공합니다. 이렇게 하면 키보드 입력을 직접 처리하거나 오프스크린 EditText
위젯을 사용하는 경우 발생하는 여러 문제점을 방지할 수 있습니다.
게임패드 입력
게임패드는 연결 및 연결 해제 이벤트, 햅틱 지원, 자이로스코프를 비롯한 고급 입력 지원, 사용 가능한 경우 조명 색상과 같은 출력 지원을 비롯하여 Android 전반에서 공식적으로 지원됩니다.
앱 개발자는 View
또는 Activity
콜백을 통해 게임패드 입력을 리슨할 수 있지만 게임 개발자는 다음과 같은 게임 컨트롤러 라이브러리를 사용하는 것이 좋습니다.
- 자체 게임 엔진에 쉽게 통합할 수 있도록 C++로 작성됨
- 모든 게임패드 기능을 하나의 API로 중앙 집중화
- 게임 라벨이 플레이어의 게임패드와 일치할 수 있도록 게임패드의 면 버튼에 있는 기호의 모호성을 제거합니다.
- 버튼이 일부 게임패드에서는 아날로그 입력이지만 다른 게임패드에서는 바이너리 입력인 경우 게임패드 이벤트 보고를 통합합니다.
- 최신 게임패드에 대해 이전 Android 기기에서 제한적인 상위 호환성을 제공합니다.
스타일러스 입력
Android는 압력, 방향, 기울기, 마우스 오버, 손바닥 감지 등 대부분의 기기에서 고급 스타일러스 지원을 제공합니다. 호환성을 높이기 위해 터치 콜백으로 전송되는 스타일러스 이벤트이지만 엔진 로직에서 이러한 이벤트를 필터링하는 경우 스타일러스 기기로 테스트하는 것이 중요합니다. 전체 통합은 터치 영역이 작은 게임이나 자유 형식 그리기가 자연스러운 게임에 유용합니다.
렌더링이 스타일러스 움직임보다 뒤처지면 지연 시간은 손가락에 의해 차단되거나 키보드, 마우스, 게임패드와 같이 화면에서 연결 해제된 경우보다 더 분명하게 나타납니다. 따라서 Android는 펜 모션에서 화면에 표시되기까지 4ms의 짧은 지연 시간으로 획을 렌더링하기 위한 지연 시간이 짧은 파이프라인을 제공합니다. 게임에서 이 기능을 활용하여 실제 세계와 직접 연결된 느낌을 주는 방법에는 세 가지가 있습니다.
- Jetpack Ink 라이브러리는 모든 Android 프로젝트에 반응형 획 렌더링을 추가하는 편리한 도구 키트를 제공합니다.
- 획 렌더링에 Kotlin 구성요소를 사용하지 못하거나 사용하고 싶지 않은 게임의 경우 전체 C++ 소스 코드를 사용할 수 있습니다. 이를 통해 개발자는 필요한 기능을 기술에 직접 통합할 수 있습니다.
- 전체 맞춤 통합이 필요한 게임의 경우 전면 버퍼에서 직접 맞춤 렌더링 로직을 실행하여 응답성과 제어를 모두 극대화할 수 있습니다.
TV 컨트롤러
Android TV 기기에는 4가지 기본 방향과 확인 버튼으로 구성된 5방향 D패드가 포함된 리모컨이 제공됩니다. Android의 내장 위젯 시스템을 사용하는 애플리케이션은 기본적으로 이를 지원하지만 개발자는 TV 기기에서 호환성을 유지하기 위해 게임의 맞춤 위젯을 테스트해야 합니다.
자세한 내용은 Android TV 문서를 참고하세요.
추가 고려사항
플레이어에게 최상의 환경을 제공하려면 여러 입력 형식을 고려하여 설계하고 실시간으로 전환하세요. 이렇게 하면 플레이어가 현재 게임 모드에 따라 다양한 입력 방법 간에 빠르게 이동하거나 게임이 하나의 Android 기기에서 다양한 구성 간에 쉽게 전환할 수 있습니다.
이를 염두에 두고 다음 사항에 유의하세요.
- 입력 유형의 존재 여부를 확인하는 것이 폼 팩터로 필터링하는 것보다 좋습니다. 예를 들어 ChromeOS에서만 마우스 및 키보드 지원을 사용 설정하면 분리형 키보드가 있는 태블릿을 사용하는 플레이어는 이 추가 작업의 이점을 누리지 못합니다.
- 폼 팩터 외에도 최적의 입력 형식에 영향을 미치는 고려사항이 있습니다. 예를 들어 플레이어의 접근성 요구사항으로 인해 마우스나 터치스크린을 사용하기 어렵거나 불편할 수 있지만 게임패드나 키보드는 이상적일 수 있습니다.
- 지원이 없는 것보다는 어떤 지원이라도 받는 것이 낫습니다. 입력 변경사항에 즉시 반응하는 것이 이상적이지만, 플레이어가 액세스할 수 있는 한 지원이 없는 것보다는 약간의 지원이 있는 것이 좋습니다.
- 게임을 실행할 때마다 최적의 입력이 달라질 수 있습니다. 예를 들어 이동 중에 게임을 플레이할 때는 터치 스크린이, 휴대전화가 TV에 연결되어 있을 때는 게임패드가, 책상에 앉아 있을 때는 마우스와 키보드가 더 적합합니다.
사용자 입력에 응답하는 방법
일반적인 모바일 게임은 기기당 한 명의 플레이어를 지원합니다. 최상의 결과를 얻으려면 게임이 가능한 모든 입력에 응답하고 플레이어가 실제로 사용 중인 항목에 따라 UI를 전환해야 합니다. 이렇게 하면 하나의 게임 버전이 모든 폼 팩터에서 자동으로 작동하며 플레이어는 필요에 따라 입력을 조합할 수도 있습니다.
개발자는 UI를 전환하기 전에 지연 시간이 내장된 기본 입력 방법을 사용하고 싶어 하는 경우가 많습니다. 무슨 의미인가요?
- 대부분의 플레이어는 터치 스크린에서 플레이하므로 실행 시 터치 컨트롤을 표시합니다. 플레이어가 키보드나 게임패드로 게임을 시작하고 일정 시간 동안 터치스크린을 사용하지 않으면 터치 영역을 페이드 아웃합니다.
- 플레이어가 게임패드를 사용하고 키보드 키를 누르면 게임 내 힌트가 전환되어 게임패드 버튼 대신 키보드 버튼이 표시됩니다.
- 플레이어가 키보드와 게임패드를 동시에 사용하는 경우 디스플레이 깜박임을 방지하기 위해 UI를 한 세트의 힌트에서 다른 세트의 힌트로 전환하기 전에 지연을 빌드합니다.
- 입력을 처리할 때 입력 소스 유형을 확인합니다. 키보드 키와 게임패드 버튼 모두 키 다운 이벤트를 내보냅니다.
- 게임에서 처리할 수 없는 한 입력을 처리됨으로 표시하지 마세요. Android는 최신 폼 팩터의 호환성을 용이하게 하기 위해 일부 이벤트를 다시 내보냅니다. 예를 들어 게임패드 A 버튼을 OK 버튼으로 전환합니다.
매니페스트에서 입력 지원 주석 처리
필수는 아니지만 처리하는 입력 유형을 매니페스트 기능 플래그로 주석 처리하는 것이 가장 좋습니다. 일반적인 플래그는 다음과 같습니다.
android.hardware.type.pc
: ChromeOS와 PC 모두에서 입력 호환성 레이어를 사용 중지하여 개발자가 마우스 이벤트를 직접 처리할 수 있도록 합니다. 게임이 휴대전화로 계속 전송되도록android:required="false"
를 설정합니다.android.hardware.gamepad
: 앱과 게임은 게임패드를 지원하는지 여부와 관계없이 게임패드 이벤트를 수신합니다. 이 매니페스트 플래그를 정의하고android:required="false"
를 설정하면 게임패드가 연결된 Android TV 기기에 게임을 제공할 수 있습니다.
-
제조업체는 일부 기기에 스타일러스 지원을 빌드할 수 있지만 지원이 보장되는 폼 팩터는 없습니다. 그리기 패드는 Android 기기에 연결할 수 있으며 스타일러스로 표시됩니다. ↩
-
일부 PC에서는 터치 스크린과 스타일러스를 지원하지만 Google Play 게임즈 클라이언트는 호스트 운영체제의 마우스 이벤트에만 응답합니다. 호환성을 극대화하기 위해 마우스 이벤트는 기본적으로 클라이언트에 터치 이벤트로 표시됩니다. 자세한 내용은 마우스 입력 섹션을 참고하세요. ↩
-
ChromeOS 기기는 일반적으로 마우스와 키보드를 지원하지만 터치스크린은 선택사항입니다. 많은 터치 스크린 지원 기기에서 스타일러스 입력도 지원합니다. ↩
-
Android Automotive OS는 Android 휴대전화 없이 작동할 수 있는 Android가 내장된 자동차를 의미합니다. 이 차트에서는 Automotive OS를 참조합니다. Android Auto는 휴대전화의 앱을 자동차에 투사하며 Android Auto (투사)를 지원하는 기기에는 터치 스크린이 없을 수 있습니다. ↩
-
Wear OS 기기의 연결은 제한적입니다. 블루투스 주변기기를 스캔할 수 있지만 OS가 연결되지 않는 경우가 많습니다. ↩