Android 裝置有多種形狀和大小。讓玩家隨時隨地透過手機、平板電腦、電腦、電視或 XR 頭戴式裝置遊玩,擴大遊戲觸及範圍。您將學到:
- 如何透過滑鼠和鍵盤支援功能,讓玩家在電腦和 ChromeOS 上遊玩您的遊戲,並改善大螢幕裝置上的遊戲體驗。
- 如何透過遊戲控制器整合功能,在玩家所在位置觸及最忠實的玩家。
- 如何新增觸控筆支援功能,讓玩家隨時隨地享受精準且反應靈敏的遊戲體驗。
- 如何支援電視控制器,並解鎖玩家擁有的最大螢幕:電視。
- 設計考量:何時切換輸入法。
- 跨板型規格遊戲如何支援玩家的輸入偏好設定。
- 以及更多功能。
自動相容性
Android 會盡可能提供自動非觸控相容性,例如:
dispatchTouchEvent
/onTouchEvent
會回應動作事件,即使是點擊或觸控筆輸入的動作也一樣。也就是說,如果您未勾選工具類型,觸控處理邏輯應可搭配滑鼠和觸控筆運作。- 部分未處理的遊戲控制器和電視控制器事件會重新傳送為鍵盤事件。
電腦類板型規格 (例如 Play 遊戲和 ChromeOS) 預設會透過滑鼠點擊產生觸控動作。由於可能沒有可用來備用的觸控螢幕,因此這項功能可提供基本相容性。
類似電腦的板型規格 (例如 Play 遊戲和 ChromeOS) 預設會產生觸控事件,而非滑鼠事件,以便與需要觸控螢幕輸入的遊戲達到最佳相容性。
為提供最佳使用者體驗,請直接支援非觸控輸入方式,而非依賴自動相容性。
支援所有板型規格
Android 可在越來越多的裝置上執行。無論玩家是將手機展開成大螢幕平板電腦、開啟支援 Android 的電視、在 Chromebook 上開啟 Android 遊戲,或是在車上等待充電時快速啟動遊戲,您都能在更多地方和螢幕上吸引玩家。您只需要確保遊戲可以在玩家所在地區遊玩:
板型規格 | 一般預設輸入 | 觸控螢幕 | 滑鼠和鍵盤 | 遊戲手把 | 觸控筆1 | 5 向 D-Pad |
---|---|---|---|---|---|---|
電話 | 觸控螢幕 | 是 | 是 | 是 | 是 | 是 |
大螢幕 | 觸控螢幕 | 是 | 是 | 是 | 是 | 是 |
PC2 | 滑鼠和鍵盤 | 否 | 可 | 是 | 否 | 否 |
ChromeOS3 | 觸控板、滑鼠和鍵盤 | 偶爾 | 是 | 是 | 是 | 是 |
電視 | 5 向 D-Pad | 否 | 可 | 是 | 否 | 是 |
汽車4 (Automotive OS) |
觸控螢幕 | 是 | 是 | 是 | 否 | 是 |
觀看5 | 觸控螢幕 | 是 | 否 | 否 | 否 | 否 |
這份表格旨在協助您優先支援新的輸入機制,並強調各板型規格預期的輸入方式。請注意,您應:
- 避免使用單一預設輸入機制。這麼做可能會不小心限制非接觸式行銷活動的觸及範圍。舉例來說,雖然大多數玩家都想使用滑鼠和鍵盤玩 ChromeOS 遊戲,但有些玩家可能還是需要觸控螢幕支援,這取決於裝置設定檔。
- 避免將輸入機制鎖定為特定板型。Android 支援多種周邊裝置,混合型裝置也越來越受歡迎。如果玩家擁有平板電腦,且該平板電腦隨附可拆卸式鍵盤,從手機版本中移除鍵盤支援功能,可能會讓遊戲顯得不完整。
滑鼠輸入
玩家可能會使用搭載 Android 的裝置,例如 ChromeOS 筆電、Android 平板電腦或電腦,以便享有最大且最具沉浸感的螢幕體驗。玩家通常會希望在這些裝置上使用滑鼠進行遊戲,因此加入支援功能有助於提高玩家參與度。Android 支援電腦作業系統常見的功能,包括:
- 支援左鍵、右鍵和中鍵點擊,以及「返回」和「前進」等額外按鈕
- 滾輪偵測
- 絕對或相對 (也稱為「指標擷取」) 滑鼠動作回報
- 定義自訂游標圖示
以下板型規格有專屬指南:
觸控板輸入
Android 上的觸控板輸入擷取功能與滑鼠支援功能略有不同。呼叫 requestPointerCapture()
時,您會要求對平板上的觸控動作存取權。也就是說,您會以與從觸控螢幕取得多點觸控事件相同的方式,接收每個觸控事件,只是座標是在觸控板的座標空間中,而非螢幕的座標空間。在這個模式中,Android 內建的觸控板手勢偵測和手掌過濾功能會停用。舉例來說,如果使用者在操控板上移動一根手指,同時將大拇指放在左下角,準備點選,則遊戲必須決定在邏輯中使用哪一根手指的動作 (例如移動相機)。
也就是說,內建觸控板的遊戲控制器可用於手勢輸入,提供更強大的手勢輸入功能。
如要判斷玩家在游標擷取期間是使用滑鼠還是觸控板,請檢查 InputDevice#getSources()
或 MotionEvent#getSource()
的來源值,找出 InputDevice.SOURCE_TOUCHPAD
。
鍵盤輸入
幾乎所有 Android 裝置都支援鍵盤。視您開發的遊戲類型而定,在遊戲中加入鍵盤支援功能的好處包括:讓遊戲更容易上手,進而吸引更多玩家;以及讓遊戲更具沉浸感,讓玩家更能直覺操作。
以下是一些常見的鍵盤支援方式,可用來改善遊戲:
- 如果是無觸控裝置,則必須將多點觸控機制對應至鍵盤。對於需要同時觸碰兩個以上螢幕區塊的遊戲 (例如移動和跳躍),您可以將這些動作對應至按下鍵盤按鍵,以便在大型螢幕和非觸控螢幕上改善遊戲體驗。
- 讓使用者可透過鍵盤操作選單在選單和靜態遊戲元素中加入按鈕導覽 (例如方向鍵和 Enter 鍵),即可在電視上玩遊戲,並改善所有板型規格的無障礙功能。
- 新增畫面上動作的快速鍵。將玩家在螢幕上可觸碰的任何項目,對應至鍵盤動作。快速存取操作 (例如在策略遊戲中選取單位,或在動作遊戲中啟用庫存格),可讓玩家更投入遊戲。
請注意,雖然 QWERTY 鍵盤相當常見,但市面上有許多不同的鍵盤配置,而且某些字元在某種鍵盤配置中是單鍵按下,在其他鍵盤配置中則是按鍵組合。
如果遊戲使用按鍵的相對位置執行動作,例如使用 W、A、S 和 D 鍵 (如箭頭鍵) 移動,請使用 InputDevice.getKeyCodeforKeyLocation()
將 QWERTY 鍵的位置對應至 KeyEvent.getKeyCode()
中的按鍵代碼。如果播放器的版面配置有所變更,系統會呼叫 onInputDeviceChanged()
。
在遊戲中新增文字輸入時,GameActivity 中的 TextInput 會提供機制,可在使用遊戲內文字轉譯引擎的同時,可靠地處理 IME 輸入內容、變音符號或其他區域特定的版面配置變化。這樣一來,您就能避免直接處理鍵盤輸入內容或使用螢幕外 EditText
小工具所產生的許多陷阱。
遊戲手把輸入
遊戲控制器在 Android 上獲得正式支援,包括連線和斷線事件、觸覺回饋支援、進階輸入支援 (包括陀螺儀),以及燈光顏色等輸出支援 (如有)。
應用程式開發人員可以透過 View
或 Activity
回呼監聽遊戲控制器輸入內容,但我們建議遊戲開發人員使用遊戲控制器程式庫,因為這個程式庫可提供以下功能:
- 以 C++ 編寫,方便整合至您自己的遊戲引擎
- 將所有遊戲手把功能集中到一個 API 中
- 將遊戲標籤與玩家的遊戲控制器上的按鈕符號對應,以便清楚區分遊戲控制器的按鈕
- 在某些遊戲搖桿上,按鈕是類比輸入,但在其他遊戲搖桿上則是二進位輸入,此時會統一回報遊戲搖桿事件
- 針對舊款 Android 裝置提供有限的向前相容性,以便支援較新的遊戲控制器
觸控筆輸入
Android 在大多數裝置上提供進階觸控筆支援,包括感壓、方向、傾斜、懸停和手掌偵測。觸控回呼會收到觸控筆事件,以利相容性,但為了避免引擎邏輯篩除這些事件,請務必使用觸控筆裝置進行測試。完整整合功能可為觸控目標較小的遊戲,或讓玩家以自然方式進行自由繪圖的遊戲帶來好處。
當算繪延遲時間落後於觸控筆移動速度時,延遲時間會比手指遮蔽或鍵盤、滑鼠或遊戲手把與螢幕斷開時更明顯。因此,Android 提供低延遲管道,可在 4 毫秒的延遲時間內,將筆觸動作轉換為螢幕上的顯示內容。遊戲可以透過三種方式運用這項功能,讓遊戲與真實世界直接連結:
- Jetpack Ink 程式庫提供方便的工具包,可為任何 Android 專案新增回應式筆觸算繪。
- 如果遊戲無法或不願依賴 Kotlin 元件進行筆觸算繪,您可以使用完整的 C++ 原始碼。這可讓開發人員直接將所需內容整合至技術中。
- 對於需要完全自訂整合的遊戲,您可以直接在前端緩衝區執行自訂轉譯邏輯,以便盡可能提高回應速度和控制能力。
電視遙控器
Android TV 裝置隨附遙控器,內含 5 向 D-pad,包括四個基本方向和「OK」按鈕。使用 Android 內建小工具系統的應用程式預設會支援這些功能,但開發人員必須測試遊戲的自訂小工具,確保在電視裝置上維持相容性。
詳情請參閱 Android TV 說明文件。
其他注意事項
為了讓玩家享有最佳體驗,請以多種輸入方式為設計重點,並隨時切換輸入方式。這樣一來,玩家就能根據所處的遊戲模式,快速在不同輸入方法之間切換,或是在單一 Android 裝置的不同設定之間輕鬆切換遊戲。
請注意下列事項:
- 檢查某種輸入類型的存在性,比根據板型規格篩選更為理想。舉例來說,如果您只在 ChromeOS 上啟用滑鼠和鍵盤支援功能,使用平板電腦的玩家就無法透過可拆式鍵盤獲得額外好處。
- 除了板型規格外,還有其他因素會影響最佳輸入方式。舉例來說,玩家可能因無障礙需求而無法順利使用滑鼠或觸控螢幕,但使用遊戲控制器或鍵盤則是理想的選擇。
- 有支援總比沒有好。理想情況下,您應即時回應輸入內容變更,但只要玩家能夠取得支援,即使不支援也無妨。
- 最佳輸入內容可能會因遊戲執行次數而異。舉例來說,在外出時玩遊戲,最好使用觸控螢幕;將手機插入電視時,最好使用遊戲控制器;坐在桌前時,最好使用滑鼠和鍵盤。
如何回應使用者輸入內容
一般行動遊戲支援每部裝置一個玩家。為了獲得最佳成效,遊戲會回應所有可能的輸入內容,並根據玩家目前使用的內容調整 UI。這樣一來,遊戲的單一版本就能自動在所有板型規格上運作,玩家甚至還能依需求混搭輸入方式。
開發人員通常會希望在轉換 UI 之前,使用內建延遲時間的預設輸入法。代表什麼意思?
- 由於大多數玩家都是在觸控螢幕上遊玩,請在啟動時顯示觸控控制項。如果玩家開始使用鍵盤或遊戲控制器,且一段時間內未使用觸控螢幕,請淡出觸控層。
- 如果玩家使用遊戲控制器並按下鍵盤按鍵,請將遊戲內提示切換為顯示鍵盤按鍵,而非遊戲控制器按鍵。
- 當玩家同時使用鍵盤和遊戲控制器時,請在 UI 從一組提示切換至另一組提示之前,先加入延遲時間,以免螢幕閃爍。
- 處理輸入內容時,請檢查輸入來源類型;鍵盤按鍵和遊戲控制器按鈕都會觸發按下事件。
- 除非遊戲可以處理,否則請勿將輸入內容標示為已處理。Android 會重新發出部分事件,以便在較新的板型規格上提供相容性,例如將遊戲控制器的 A 按鈕轉換為 OK 按鈕。
在資訊清單中註解輸入支援
雖然這不是必要做法,但建議您使用資訊清單功能旗標註解,指出您要處理的輸入類型。常見的標記如下:
android.hardware.type.pc
:在 ChromeOS 和電腦上停用輸入相容性層,讓開發人員直接處理滑鼠事件。設定android:required="false"
,讓遊戲仍可傳送至手機。android.hardware.gamepad
:無論應用程式和遊戲是否支援遊戲控制器,都會收到遊戲控制器事件。定義這個資訊清單旗標並設定android:required="false"
,即可將遊戲提供給連接遊戲控制器的 Android TV 裝置。
-
製造商可為部分裝置內建觸控筆支援功能,但沒有任何保證支援的板型規格。繪圖板可插入 Android 裝置,並顯示為觸控筆。 ↩
-
雖然部分電腦支援觸控螢幕和觸控筆,但 Google Play 遊戲用戶端只會回應主機作業系統的滑鼠事件。為盡可能提高相容性,滑鼠事件預設會以觸控事件形式顯示在用戶端中。詳情請參閱「滑鼠輸入」一節。 ↩
-
ChromeOS 裝置通常支援滑鼠和鍵盤,但不一定支援觸控螢幕。許多支援觸控螢幕的裝置也支援觸控筆輸入。 ↩
-
Android Automotive OS 是指內建 Android 的車輛,可在沒有 Android 手機的情況下運作。這張圖表所指的就是 Automotive OS。Android Auto 會將手機上的應用程式投影到車上,而支援 Android Auto (投影) 的裝置可能沒有觸控螢幕。 ↩
-
Wear OS 裝置的連線能力受限。你可以掃描藍牙周邊裝置,但 OS 經常無法連線。 ↩