TV ゲームを作成する

テレビ画面では、モバイルゲーム開発者にはなじみがないと思われる多くの点に考慮しなければなりません。これらの分野には、その規模、コントロール方法、すべてのプレーヤーが 表示されます。

ディスプレイ

テレビ画面用のゲームを開発する際には、 低レイテンシに対応できるよう 設計されています

横向き表示のサポート

テレビは常に横向きで、回転させることはできず、縦向きにはなりません。常に設計する テレビゲームを横向きで表示できます

自動低遅延モード

一部のディスプレイでは、グラフィックを後処理することがあります。この後処理はグラフィックの品質を向上させますが、レイテンシが増大することがあります。HDMI 2.1 をサポートする新しいディスプレイには、 レイテンシ モードALLM)は、この後処理をオフに切り替えることでレイテンシを最小限に抑えます。対象 ALLM について詳しくは、このモジュールの HDMI 2.1 仕様他のディスプレイでは、同様の動作をするゲームモードがサポートされている場合があります。

Android 11 以降では、ウィンドウは最小限の後処理をリクエストすることで、自動低レイテンシ モードまたはゲームモード(利用可能な場合)を使用するようにリクエストできます。これは特に ゲーム アプリケーションやビデオ会議アプリケーションに役立ちます。このアプリケーションでは、アプリケーションよりもレイテンシの短縮が 最適なグラフィックで最適な状態を 提供することを目指しています

後処理の最小化を有効または無効にするには、Window.setPreferMinimalPostProcessing() を呼び出すか、ウィンドウの preferMinimalPostProcessing 属性を true に設定します。すべてのディスプレイが最小限の後処理をサポートしているわけではありません。問題の有無を サポートしている場合は、 Display.isMinimalPostProcessingSupported() メソッドを使用します。

入力デバイス

テレビにはタッチ インターフェースがないため、適切な操作方法で、直観的に心地よく使用できるようにすることが重要となります。コントローラを扱うにあたって、複数コントローラの追跡や、切断を円滑に処理するなど、注意を払うべき課題があります。ゲームを含めたすべてのテレビアプリで、コントローラの扱いが一貫している必要があります。詳しくは、テレビの管理 コントローラをご覧ください。 特定のインスタンスのゲーム用のコントローラを処理する ゲームでのテレビ コントローラの使用に関する情報をご覧ください。

キーボードレイアウト

Android 13(API レベル 33)以降では、 getKeyCodeForKeyLocation()。 たとえば、ゲームは WASD キーを使用した動きをサポートしていますが、 異なる位置に A キーと W キーがある AZERTY キーボード特定の位置に想定されるキーのキーコードを取得できます。

KotlinJava
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_ZkeyLeftKeyEvent.KEYCODE_Q に設定されています。 keyDownkeyRightKeyEvent.KEYCODE_S に設定されています KeyEvent.KEYCODE_D を使用します。では、これらのイベントに対応するキーイベント ハンドラを 想定された動作を実装する必要があります。

マニフェスト

ゲームでは、Android マニフェストに必ず含めるべきものがあります。

ゲームをホーム画面に表示する

Android TV のホーム画面では、通常のアプリとは別の行にゲームが表示されます。 ゲームをゲームリストに表示するには、 <ph type="x-smartling-placeholder"></ph> android:isGame 属性を、アプリ マニフェストの "true" に追加する <application> タグを付けます。次に例を示します。

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

ゲーム コントローラのサポートを宣言する

テレビデバイスのユーザーがゲーム コントローラを利用できない場合、あるいはアクティブでない場合があります。Google Cloud で ゲームがゲーム コントローラに対応していることをユーザーに通知する場合は、 アプリ マニフェストを次のように設定します。

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

注: android:hardware:gamepad サポートを指定する場合は、 android:required 属性を "true" に設定。そのように設定すると、ユーザーがそのアプリをテレビデバイスにインストールできなくなります。

マニフェスト エントリの詳細については、アプリ マニフェストをご覧ください。

Google Play ゲームサービス

ゲームが Google Play Games サービスを統合している場合は、 留意すべき点として 実績、ログイン、ゲームの保存に関する考慮事項。

実績

ゲームには、少なくとも 5 つの(獲得可能な)実績がなければなりません。ゲームプレイを制御しているユーザーのみ 実績を獲得できるようにする必要があります。実績の詳細とその実装については、Android での実績をご覧ください。

ログイン

ゲームの起動時には、ユーザーのログインを試す必要があります。プレーヤーがログインを連続して数回拒否した場合、ログイン要求を止めなければなりません。ログインについて詳しくは、ログインを実装する Android

保存

Google Play 開発者サービスの保存済みゲームを使用してデータを保存 表示されます。ゲームは、ゲーム セーブを特定の Google アカウントにバインドして、 つまり、プレーヤーが使用しているのがハンドセットかテレビかにかかわらず、 ゲームは、同じユーザー アカウントからゲーム保存情報を取得できる必要があります。

また、プレーヤーがローカルおよびクラウドに保存されたデータを削除できるオプションを、ゲームの UI に用意する必要もあります。このオプションはゲームの Settings 画面に置くことができます。Play 開発者サービスを使用した保存済みゲームの実装の詳細については、Android の保存済みゲームをご覧ください。

終了

ユーザーがゲームを正常に終了できる、一貫性のある明確な UI 要素を用意してください。この 要素には、D-pad ナビゲーション ボタンでアクセスできる必要があります。この方法は、基盤となるインフラストラクチャ 終了するためのホームボタンを使用する。これは、コントローラ間で一貫性もなく、信頼性もない。

ウェブ

Android TV のゲームではウェブ ブラウジングを有効にしないでください。Android TV はウェブブラウザをサポートしていません。

注: ログインに WebView クラスを使用すると、 ソーシャル メディア サービスなど、

ネットワーク

ゲームで最適なパフォーマンスを実現するには、大容量の帯域幅が必要になることが多く、ユーザーの多くは そのパフォーマンスを提供しますアプリで Wi-Fi とイーサネットの両方を確認する必要があります。 接続しますアプリがテレビのみを対象としている場合、それまでと同様に 3G/LTE サービスを確認する必要はありません。 モバイルアプリの場合は