Android 设备形状各异且尺寸不一。让玩家能够随时随地畅玩您的游戏(无论是手机、平板电脑、PC、电视还是 XR 头盔),从而扩大游戏的覆盖面。您将在此学习:
- 鼠标和键盘支持如何让玩家在 PC 和 ChromeOS 上畅玩您的游戏,以及如何提升大屏设备上的游戏可玩性。
- 如何通过游戏手柄集成,在玩家最常用设备上满足他们的需求。
- 如何添加触控笔支持,以便随时随地畅玩游戏,并获得精准的响应。
- 如何支持电视控制器,并解锁玩家拥有的最大屏幕:电视。
- 有关何时在输入法之间切换的设计注意事项。
- 跨平台游戏如何支持玩家的输入偏好设置。
- 等等。
自动兼容
Android 会尽可能实现自动非触控兼容性,例如:
dispatchTouchEvent
/onTouchEvent
会通过动作事件做出响应,即使是点击或触控笔输入也是如此。这意味着,如果您不检查工具类型,您的触摸处理逻辑应适用于鼠标和触控笔。- 某些未处理的游戏手柄和 TV 控制器事件会重新发送为键盘事件。
Play 游戏和 ChromeOS 等类似 PC 的外形规格默认会通过鼠标点击生成触摸操作。由于可能没有可回退的触摸屏,因此这提供了基本级别的兼容性。
默认情况下,类似 PC 的外形规格(例如 Play 游戏和 ChromeOS)会生成触摸事件,而不是鼠标事件,以最大限度地与预期使用触摸屏输入的游戏兼容。
为了提供最佳用户体验,请直接支持非触控输入,而不是依赖于自动兼容性。
支持所有设备规格
Android 可在越来越多的设备上运行。无论玩家是将手机展开为大屏平板电脑、开启搭载 Android 的电视、在 Chromebook 上打开 Android 游戏,还是在等待充电时在车上快速玩游戏,您都可以比以往更加灵活地在更多地点和更多显示屏上吸引玩家。您只需确保您的游戏在玩家所在的国家/地区可以正常运行:
设备规格 | 典型的默认输入 | 触摸屏 | 鼠标和键盘 | 游戏手柄 | 触控笔1 | 5 向方向键 |
---|---|---|---|---|---|---|
电话 | 触摸屏 | 是 | 是 | 是 | 是 | 是 |
大屏幕 | 触摸屏 | 是 | 是 | 是 | 是 | 是 |
PC2 | 鼠标和键盘 | 否 | 是 | 是 | 否 | 否 |
ChromeOS3 | 触控板、鼠标和键盘 | 偶尔 | 是 | 是 | 是 | 是 |
TV | 5 向方向键 | 否 | 是 | 是 | 否 | 是 |
汽车4 (Automotive OS) |
触摸屏 | 是 | 是 | 是 | 否 | 是 |
手表5 | 触摸屏 | 是 | 否 | 否 | 否 | 否 |
此表旨在突出显示每种外形规格的预期输入,以帮助您确定支持新输入机制的优先级。请注意,您应:
- 避免使用单一默认输入机制。这样做可能会无意中限制非接触式广告的覆盖面。例如,虽然大多数玩家希望使用鼠标和键盘玩 ChromeOS 游戏,但有些玩家可能仍希望支持触摸屏,具体取决于他们的设备配置。
- 避免将输入机制锁定到外形规格。Android 可与各种外围设备搭配使用,而混合设备越来越受欢迎。如果玩家使用的是随附可拆卸键盘的平板电脑,从手机 build 中移除键盘支持可能会导致游戏给人感觉不完整。
鼠标输入
玩家最大的屏幕可能是搭载 Android 的设备,无论是 ChromeOS 笔记本电脑、Android 平板电脑还是 PC。玩家通常希望在这些设备上使用鼠标玩游戏,添加支持可以提高玩家互动度。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
回调监听游戏手柄输入,但我们建议游戏开发者使用 Game Controller 库,因为该库具有以下特点:
- 使用 C++ 编写,以便集成到您自己的游戏引擎
- 将所有游戏手柄功能集中到一个 API 中
- 消除游戏手柄按钮上的符号歧义,以便游戏的标签与玩家的游戏手柄相匹配
- 在某些游戏手柄上的按钮是模拟输入,而其他游戏手柄上的按钮是二进制输入的情况下,统一游戏手柄事件的报告
- 在旧版 Android 设备上为较新游戏手柄提供有限的前向兼容性
触控笔输入
Android 在大多数设备上都提供高级触控笔支持,包括压力、方向、倾斜度、悬停距离和手掌检测。触控笔事件会发送到触摸回调以提高兼容性,但请务必使用触控笔设备进行测试,以防引擎逻辑滤除这些事件。完全集成对触摸目标较小或需要自然地进行自由形式绘图的游戏非常有用。
与手指被遮挡或与键盘、鼠标或游戏手柄断开连接相比,当渲染滞后于触控笔移动时,延迟时间更明显。因此,Android 提供了一个低延迟流水线来渲染笔触,从触控笔移动到屏幕上显示的延迟时间仅为 4 毫秒。您的游戏可以通过以下三种方式利用此功能,让玩家感觉游戏与现实世界直接相关:
- Jetpack Ink 库提供了一个便捷的工具包,可用于向任何 Android 项目添加响应式笔画渲染。
- 对于无法或不愿依赖 Kotlin 组件进行笔触渲染的游戏,可以使用完整的 C++ 源代码。这样,开发者就可以将所需内容直接集成到其技术中。
- 对于需要完全自定义集成的游戏,可以直接在前端缓冲区上执行自定义渲染逻辑,以最大限度地提高响应速度和控制力。
电视控制器
Android TV 设备随附包含 5 向方向键的遥控器,其中包含四个基本方向和一个 OK 按钮。使用 Android 内置 widget 系统的应用默认支持这些 widget,但开发者必须测试其游戏的自定义 widget,以便在 TV 设备上保持兼容性。
如需了解详情,请参阅 Android TV 文档。
其他注意事项
为了让玩家获得最佳体验,请围绕多种输入形式进行设计,并能够在这些输入形式之间快速切换。这样,玩家就可以根据所处的游戏模式在不同的输入法之间快速切换,或者游戏可以在 Android 设备的不同配置之间轻松切换。
请注意以下事项:
- 检查是否存在某种输入比按外形规格过滤更为有效。例如,如果您仅在 ChromeOS 上启用鼠标和键盘支持,那么使用可拆卸键盘的平板电脑的玩家将无法获享您额外付出的努力。
- 除了外形规格之外,还有一些因素会影响最佳输入形式。例如,由于玩家有无障碍功能需求,可能很难或很难受地使用鼠标或触摸屏,但游戏手柄或键盘则非常适合。
- 有任何支持总比没有支持好。最好能够动态响应输入变化,但只要玩家能够获得支持,他们会更乐意获得一些支持,而不是完全没有支持。
- 最佳输入可能在游戏运行期间发生变化。例如,在外出玩游戏时,最好使用触摸屏;将手机插入电视时,最好使用游戏手柄;坐在桌前时,最好使用鼠标和键盘。
如何响应用户输入
典型的移动游戏支持每部设备一名玩家。为了获得最佳效果,游戏应响应所有可能的输入,并根据玩家当前使用的功能调整界面。这样一来,游戏的一个版本便可自动适用于所有类型的设备,玩家甚至可以混合使用输入法,以满足自己的需求。
通常,开发者希望在界面切换之前使用内置延迟的默认输入法。这意味着什么?
- 由于大多数玩家都是在触摸屏上玩游戏,因此请在启动时显示触控控件。如果玩家开始使用键盘或游戏手柄进行游戏,并且在一段时间内未使用触摸屏,请淡出触摸层。
- 如果玩家使用游戏手柄并按下键盘按键,系统会切换游戏内提示,以显示键盘按钮,而不是游戏手柄按钮。
- 当玩家同时使用键盘和游戏手柄时,请在从一组提示切换到另一组提示之前内置延迟,以避免显示屏闪烁。
- 处理输入时,请检查输入源类型;键盘按键和游戏手柄按钮都会发出按键按下事件。
- 除非您的游戏可以处理输入,否则请勿将其标记为已处理。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 设备的连接性有限。您可以扫描蓝牙外围设备,但操作系统通常无法连接。 ↩