TV 게임 빌드

텔레비전 화면은 모바일 게임 개발자에게 생소할 수 있는 여러 고려사항을 제시합니다. 이러한 영역에는 큰 크기, 제어 스키마, 모든 플레이어가 동시에 보고 있다는 사실이 포함됩니다.

디스플레이

TV 화면용 게임을 개발할 때 염두에 두어야 할 두 가지 주요 사항은 가로 모드 방향으로 게임을 디자인하고 지연 시간이 짧은 환경을 지원하는 것입니다.

가로 디스플레이 지원

TV는 항상 가로 방향입니다. 회전할 수 없으며 세로 방향이 없습니다. TV 게임은 항상 가로 모드로 표시되도록 설계하세요.

자동 저지연 모드

특정 디스플레이는 그래픽 후처리를 실행할 수 있습니다. 이 후처리는 그래픽 품질을 개선하지만 지연 시간을 늘릴 수 있습니다. HDMI 2.1을 지원하는 최신 디스플레이에는 자동 저지연 모드 (ALLM)가 있어 이 후처리를 사용 중지하여 지연 시간을 최소화합니다. ALLM에 관한 자세한 내용은 HDMI 2.1 사양을 참고하세요. 다른 디스플레이는 유사한 동작을 하는 게임 모드를 지원할 수 있습니다.

Android 11 이상에서는 창에서 최소 후처리를 요청하여 자동 저지연 모드 또는 게임 모드(사용 가능한 경우)를 사용하도록 요청할 수 있습니다. 이는 최상의 그래픽을 갖추는 것보다 짧은 지연 시간이 더 중요한 게임 및 화상 회의 애플리케이션에 특히 유용합니다.

최소 후처리를 사용 설정 또는 사용 중지하려면 Window.setPreferMinimalPostProcessing()를 호출하거나 창의 preferMinimalPostProcessing 속성을 true로 설정합니다. 모든 디스플레이가 최소 후처리를 지원하는 것은 아닙니다. 특정 디스플레이가 이를 지원하는지 확인하려면 Display.isMinimalPostProcessingSupported() 메서드를 호출하세요.

입력장치

TV에는 터치 인터페이스가 없으므로 컨트롤을 올바르게 설정하고 플레이어가 직관적이고 재미있게 사용할 수 있도록 하는 것이 더욱 중요합니다. 컨트롤러를 처리하면 여러 컨트롤러를 추적하고 연결 해제를 원활하게 처리하는 등 주의해야 할 다른 문제도 발생합니다. 게임을 포함한 모든 TV 앱은 컨트롤러를 일관되게 처리해야 합니다. TV 컨트롤러 사용에 관한 자세한 내용은 TV 컨트롤러 관리를, 게임용 TV 컨트롤러 사용에 관한 구체적인 내용은 게임용 컨트롤러 처리를 참고하세요.

키보드 레이아웃

Android 13 (API 수준 33) 이상에서는 getKeyCodeForKeyLocation()를 사용하여 키보드 레이아웃을 결정할 수 있습니다. 예를 들어 게임에서 WASD 키를 사용한 이동을 지원하지만, A 키와 W 키가 다른 위치에 있는 AZERTY 키보드에서는 제대로 작동하지 않을 수 있습니다. 특정 위치에서 예상되는 키의 키코드를 가져올 수 있습니다.

Kotlin

val inputManager: InputManager? = requireActivity().getSystemService()

inputManager?.inputDeviceIds?.map { inputManager.getInputDevice(it) }
    ?.firstOrNull { it?.keyboardType == InputDevice.KEYBOARD_TYPE_ALPHABETIC }
    ?.let { inputDevice ->
        keyUp = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_W)
        keyLeft = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_A)
        keyDown = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_S)
        keyRight = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_D)
    }

자바

InputManager inputManager = requireActivity().getSystemService(InputManager.class);
InputDevice inputDevice = Arrays.stream(inputManager.getInputDeviceIds())
        .mapToObj(inputManager::getInputDevice)
        .filter( device -> device.getKeyboardType() == InputDevice.KEYBOARD_TYPE_ALPHABETIC)
        .filter(Objects::nonNull)
        .findFirst()
        .orElse(null);
if (inputDevice != null) {
    keyUp = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_W);
    keyLeft = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_A);
    keyDown = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_S);
    keyRight = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_D);
}

이 예시에서는 AZERTY 키보드를 사용하여 keyUp가 KeyEvent.KEYCODE_Z로 설정되고 keyLeft가 KeyEvent.KEYCODE_Q로 설정되며 keyDown 및 keyRight는 각각 KeyEvent.KEYCODE_S 및 KeyEvent.KEYCODE_D로 설정됩니다. 이제 이러한 키 코드의 키 이벤트 핸들러를 만들고 예상되는 동작을 구현할 수 있습니다.

매니페스트

게임이 Android manifest에 포함해야 하는 몇 가지 특수 항목이 있습니다.

홈 화면에 게임 표시

Android TV 홈 화면에는 게임이 일반 앱과 별도의 행에 표시됩니다. 게임이 게임 목록에 표시되도록 하려면 앱 매니페스트의 <application> 태그에서 android:isGame 속성을 "true"로 설정합니다. 예를 들면 다음과 같습니다.

<application
    ...
    android:isGame="true"
    ...
>

게임 컨트롤러 지원 선언

TV 기기 사용자는 게임 컨트롤러를 사용하지 못하거나 활성화하지 못할 수 있습니다. 게임이 게임 컨트롤러를 지원한다는 사실을 사용자에게 제대로 알리려면 앱 매니페스트에 다음 항목을 포함해야 합니다.

  <uses-feature android:name="android.hardware.gamepad" android:required="false"/>

참고: android.hardware.gamepad 지원을 지정할 때 게임을 표준 TV 리모컨 (D패드)으로도 플레이할 수 있는 경우 android:required 속성을 "false"로 설정하세요. 게임을 플레이하는 데 게임 컨트롤러가 필요한 경우에만 android:required을 "true"로 설정합니다. android:required="true"를 설정하면 TV 기기에서 설치를 차단하는 대신 Android TV용 Google Play에 '게임패드 필요' 배지와 사전 설치 경고가 표시됩니다.

매니페스트 항목에 관한 자세한 내용은 앱 매니페스트를 참고하세요.

Google Play 게임 서비스

게임에 Google Play 게임즈 서비스를 통합하는 경우 업적, 로그인, 저장된 게임과 관련된 여러 고려사항을 염두에 두어야 합니다.

업적

게임에는 5개 이상의 획득 가능한 업적이 포함되어야 합니다. 지원되는 입력 장치에서 게임플레이를 제어하는 사용자만 업적을 달성할 수 있어야 합니다. 업적 및 업적 구현 방법에 관한 자세한 내용은 Android의 업적을 참고하세요.

로그인

게임은 시작 시 사용자를 로그인하려고 시도해야 합니다. 플레이어가 여러 번 연속으로 로그인을 거부하면 게임에서 더 이상 요청하지 않아야 합니다. Android에서 로그인 구현에서 로그인에 관해 자세히 알아보세요.

저장 중

Google Play 서비스 저장된 게임을 사용하여 게임 저장을 저장합니다. 게임은 기기 간에도 고유하게 식별할 수 있도록 게임 저장을 특정 Google 계정에 바인딩해야 합니다. 플레이어가 휴대전화를 사용하든 TV를 사용하든 게임은 동일한 사용자 계정에서 게임 저장 정보를 가져올 수 있어야 합니다.

또한 게임 UI에 플레이어가 로컬 및 클라우드에 저장된 데이터를 삭제할 수 있는 옵션을 제공해야 합니다. 게임의 Settings 화면에 이 옵션을 배치할 수 있습니다. Play 서비스를 사용하여 저장된 게임을 구현하는 방법에 관한 자세한 내용은 Android에서 저장된 게임을 참고하세요.

종료

사용자가 게임을 정상적으로 종료할 수 있도록 하는 일관되고 명확한 UI 요소를 제공하세요. 이 요소는 D패드 탐색 버튼으로 액세스할 수 있어야 합니다. 홈 버튼을 사용하여 종료하는 대신 이 방법을 사용하세요. 홈 버튼은 컨트롤러마다 일관되지 않고 안정적이지 않기 때문입니다.

웹

Android TV용 게임에서 웹브라우저를 사용 설정하지 마세요. Android TV는 웹브라우저를 지원하지 않습니다.

참고: 소셜 미디어 서비스에 로그인할 때 WebView 클래스를 사용할 수 있습니다.

네트워킹

게임은 최적의 성능을 제공하기 위해 더 큰 대역폭이 필요한 경우가 많으며, 많은 사용자가 이러한 성능을 제공하기 위해 Wi-Fi보다 이더넷을 선호합니다. 앱에서 Wi-Fi 및 이더넷 연결을 모두 확인해야 합니다. 앱이 TV 전용인 경우 모바일 앱에서와 같이 3G/LTE 서비스를 확인할 필요가 없습니다.