虽然 tvOS 建立在 iOS 的基础上,但它确实会带来新的挑战,例如调整内容以适应 tvOS 输入,并在大屏幕上显示。
tvOS 有两个主要的输入
Apple TV 遥控器(Siri 遥控器)是一款多功能输入设备,可充当传统的菜单导航控制器、应用程序控制器、陀螺仪、加速度传感器以及触摸手势设备。Unity 将 Apple TV 遥控器输入路由到相应的 Unity API,但不会对该输入执行其他处理。您的应用程序可能需要对其输入方案进行一些调整以利用 Apple TV 遥控器的特定输入功能。例如,您的应用程序可以将其视为传统的应用程序控制器,具有一个模拟轴和一个额外的动作按钮,或者您的应用程序可以使用加速度计进行转向等交互。在将应用程序移植到 tvOS 时,您可以尝试各种方案。
Unity 提供适用于 iOS 和 tvOS 的标准化控制器支持,即适用于 iOS (MFi) 的控制器。MFi 控制器提供开箱即用的输入映射,您可以从 编辑 > 项目设置 > 输入管理器 设置自定义动作映射。有关更多信息,请参阅 处理游戏控制器输入 和 游戏控制器控制游戏中的物体和角色的设备。
参见 术语表.
可以将两个额外的无线 MFi 控制器连接到 Apple TV 设备,这实际上将其变成了一个游戏机。您的应用程序可以使用与 iOS MFi 控制器相同的方式使用控制器,但您必须确保其仅使用 Apple TV 遥控器也能使用。tvOS 系统将其他控制器的数量限制为两个。
以下是有关访问特定 TV 遥控器功能的一些技术细节
功能 | 说明 |
---|---|
触摸区域 | 映射到 Input.touches (Touch.type 设置为 Indirect 并且被 Unity GUI 忽略) 和操纵杆输入 API(例如,Input.GetAxis(“Horizontal”))。 |
触摸区域点击 | 映射到按钮 A,然后映射到 操纵杆按钮 14 |
陀螺仪 | 映射到 Input.gyro。 Input.gyro.attitude 源于重力矢量,因此它不会绕平行于重力矢量的轴旋转。 Input.gyro.rotationRate 也适用相同情况。 |
加速度 | 映射到 Input.acceleration。 注意:Input.acceleration 源于陀螺仪 API,可能会出现一些不稳定。tvOS SDK 没有专门的加速度计 API。 |
暂停/播放按钮 | 映射到按钮 X,然后映射到 操纵杆按钮 15 |
菜单按钮 | 长按会调用 tvOS 任务切换器。您无法覆盖此行为。 您的应用程序可以通过以下两种方式处理短按 a) 如果 UnityEngine.tvOS.Remote.allowExitToHome 为 true,则返回到 tvOS 系统主屏幕。 b) 让您的应用程序响应点击(当 UnityEngine.tvOS.Remote.allowExitToHome 为 false 时,它映射到暂停按钮/操纵杆按钮 0)。这是默认行为。 您的应用程序应该根据其当前状态在 a) 和 b) 之间切换 - 如果用户当前正在与顶部菜单交互,请启用行为 a)。 - 如果用户正在实时与应用程序交互,请启用行为 b) 并在他们按下此按钮时调用应用程序内暂停菜单。 |
在遥控器边缘滑动 | 生成方向键 (D-pad) 上/下/左/右按钮按下。 有关映射列表,请参阅 游戏控制器输入映射。 |
您可以通过专用 API 控制 Apple TV 遥控器的操作模式,如下所示
注意:当 UnityEngine.tvOS.Remote.allowExitToHome 为 false 时,菜单按钮映射到 操纵杆按钮 0。这会导致与默认的 Input 窗口冲突,因为它也使用 操纵杆按钮 0 来映射提交虚拟按钮。这会导致菜单按钮触发 UI 元素上的操作。要解决此问题,请从 Input 窗口(菜单:编辑 > 项目设置,然后选择 输入 类别)中删除或修改提交虚拟按钮绑定。