打造電玩遊戲

電視畫面列出許多對手機遊戲開發人員還不熟悉的考量事項。這些區域包括大型區域、控製配置,以及所有玩家同時觀看。

螢幕

針對電視畫面開發遊戲時,請牢記兩大要點,也就是設計遊戲以橫向呈現,並提供低延遲的支援功能。

支援橫向顯示

電視一律為橫向:你無法轉動電視,也無法直向瀏覽。請一律將電視遊戲設計為以橫向模式顯示。

自動低延遲模式

某些螢幕可以執行圖形後續處理。這種後續處理作業可以改善圖像品質,但可能會增加延遲。支援 HDMI 2.1 的新型顯示器具有自動低延遲模式 (ALLM),因此可以關閉這項後續處理功能,盡可能減少延遲時間。如要進一步瞭解 ALLM,請參閱 HDMI 2.1 規格。其他螢幕可能支援有類似行為的遊戲模式

在 Android 11 以上版本中,視窗可要求使用最少的後續處理 (如有),要求使用自動低延遲模式或遊戲模式。這對遊戲和視訊會議應用程式特別有用,因為低延遲的延遲時間比使用最佳圖形更重要。

如要啟用或停用最小的後續處理作業,請呼叫 Window.setPreferMinimalPostProcessing(),或將視窗的 preferMinimalPostProcessing 屬性設為 true。並非所有螢幕都支援最少的後續處理作業;如要瞭解特定螢幕是否支援這項功能,請呼叫 Display.isMinimalPostProcessingSupported() 方法。

輸入裝置

電視沒有觸控介面,因此更重要的是妥善設定控制項,並確保玩家能找到符合直覺且有趣的介面。處理控制器也會出現需要留意的其他問題,例如追蹤多個控制器,並妥善處理連線中斷問題。所有電視應用程式 (包括遊戲) 應以一致的方式處理控制器。如要進一步瞭解如何使用電視控制器,請參閱「管理電視控制器」和「處理遊戲控制器」一文,深入瞭解如何在遊戲中使用電視控制器。

鍵盤配置

在 Android 13 (API 級別 33) 以上版本中,您可以使用 getKeyCodeForKeyLocation() 決定鍵盤版面配置。舉例來說,您的遊戲支援使用 WASD 按鍵動作,但如果 AZERTY 鍵盤具有 A 和 W 按鍵,位於不同位置,這個做法可能無法正常運作。您可以從特定位置取得所需的金鑰按鍵碼:

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)
    }

Java

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_ZkeyLeft 設為 KeyEvent.KEYCODE_Q,而 keyDownkeyRight 分別設為 KeyEvent.KEYCODE_SKeyEvent.KEYCODE_D。您現在可以為這些按鍵程式碼建立重要事件處理常式,並實作預期行為。

命運航班

Android 資訊清單應包含一些特殊項目。

在主畫面顯示遊戲

Android TV 主畫面會將賽事和一般應用程式分開顯示。如要讓您的遊戲顯示在遊戲清單中,請在應用程式資訊清單的 <application> 標記中,將 android:isGame 屬性設為 "true"。例如:

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

宣告支援遊戲控制器

電視裝置的使用者可能無法使用或啟用遊戲控制器。為了正確告知使用者您的遊戲支援遊戲控制器,您必須在應用程式資訊清單中加入下列項目:

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

注意:指定 android:hardware:gamepad 支援時,請勿將 android:required 屬性設為 "true",如此一來,使用者將無法在 TV 裝置上安裝您的應用程式。

如要進一步瞭解資訊清單項目,請參閱「應用程式資訊清單」。

Google Play 遊戲服務

如果您的遊戲整合了 Google Play 遊戲服務,請留意有關成就、登入及儲存遊戲的事項。

成就

您的遊戲至少應包含 5 個 (應得) 成就。使用者只能透過支援的輸入裝置控制遊戲過程,就能夠獲得成就。如要進一步瞭解成就和實作方式,請參閱「Android 中的成就」。

登入

遊戲應在啟動時嘗試讓使用者登入。如果玩家連續多次拒絕登入,遊戲應停止詢問。如要進一步瞭解登入功能,請參閱「在 Android 上實作登入功能」。

儲存中

使用 Google Play 服務遊戲進度存檔儲存遊戲進度資料。您的遊戲應繫結至特定 Google 帳戶,因此即使在各種裝置上都能明確識別:無論玩家使用的是手機還是電視,遊戲都必須能夠從同一個使用者帳戶提取遊戲儲存資訊。

您也應該在遊戲 UI 中提供選項,讓玩家能刪除本機和雲端儲存的資料。您或許可以將這個選項放在遊戲的 Settings 畫面中。如要進一步瞭解如何使用 Play 服務實作遊戲進度存檔,請參閱「Android 中的遊戲進度存檔」。

結束

提供一致且明顯的 UI 元素,讓使用者能優雅退出遊戲。這個元素應可透過 D-Pad 的導覽按鈕存取。不要依賴主畫面按鈕來提供結束,因為不同控制器之間不相同或可靠性。

網路

請勿啟用 Android TV 遊戲的網頁瀏覽功能。Android TV 不支援網路瀏覽器。

注意:您可以使用 WebView 類別登入社群媒體服務。

網路

遊戲往往需要更高的頻寬才能達到最佳效能,而許多使用者偏好使用 Wi-Fi 的乙太網路以提供最佳效能。您的應用程式應檢查 Wi-Fi 和乙太網路連線。如果您的應用程式僅適用於電視,則不需要像行動應用程式一樣檢查 3G/LTE 服務。