Version: 2019.4
Apple TV
tvOS 构建设置

tvOS 构建注意事项

本手册页的主要目的是帮助开发者从 iOS 过渡到 tvOS。Apple TV 平台(也称为 tvOS)建立在 iOS 平台的基础上,但也给应用程序开发者带来了新的挑战。您可以轻松地在 tvOS 上部署现有的 iOS 应用程序,但是通常必须调整应用程序的内容以兼容 tvOS 输入控件,并在更大的屏幕上正确显示。

先决条件

要进行 tvOS 开发,必须满足以下先决条件:

  • 第四代 Apple TV 设备(还需要 USB C 转 USB 3.0 线缆,此部件不包含在消费者套件中)。
  • Xcode 7.1 或更高版本。
  • 使用与 iOS 设备相同的方式为此设备设置资源调配。为了测试该资源调配是否正常工作,请使用 Xcode 创建一个空的 tvOS 应用程序。

设置注意事项

最好是创建一个单独的应用程序分支或副本,然后移植到 Apple TV。许多 iOS 插件与 Apple TV 不兼容,因为 Apple TV 只支持 iOS 框架的一个子集。Unity 无法控制第三方插件以及这些插件的跨平台兼容性。

如果应用程序的磁盘使用量超过 4 GB,请将应用程序分成更小的部分并使用按需加载资源 (On Demand Resources)。要了解更多信息,请参阅下面的按需加载资源部分。

__注意:__Bitcode 会包含在 tvOS 构建中,使可执行文件的大小增加约 130 MB。App Store 服务器会剥离此代码,因此不会影响分发大小。要估计 Bitcode 大小,请使用 otool -l 从命令行分析可执行文件中的 LLVM 部分。

实现输入

tvOS 有两种主要输入:

  • Apple TV 遥控器(强制性输入)
  • Made For iOS (MFi) 控制器(可选)

Apple TV 遥控器(Siri 遥控器)是多功能输入设备,既可用作传统菜单导航控制器、英语程序控制器、陀螺仪和加速度传感器,也可用作触摸手势设备。Unity 将 Apple TV 遥控器输入路由到相应的 Unity API,但不对该输入进行任何其他处理。

应用程序可能需要对自己的输入方案进行一些调整,以利用 Apple TV 遥控器独特的输入特性。例如,应用程序可以将该遥控器用作传统应用程序控制器(具有一个模拟轴和一个额外的动作按钮),或者也可以用作加速度计以进行交互(例如,用于转向)。在将应用程序移植到 tvOS 时可以尝试各种方案。

Unity 提供了 Made For iOS (MFi),这是针对 iOS 和 tvOS 的标准化控制器支持。MFi 控制器提供可直接使用的输入映射,但您可以在 Unity Editor 中设置自定义操作映射(菜单:__Edit > Project Settings…,然后选择 Input__ 类别)。有关更多信息,请参阅关于 iOS 游戏控制器支持的文档以及 Apple 开发者文档的游戏控制器 (Game Controllers) 部分。

可将另外两个无线 Made For iOS (MFi) 应用程序控制器连接到 Apple TV 设备,从而有效地将该设备转变为游戏主机。应用程序可以像 iOS MFi 控制器一样使用这些控制器,但必须确保可以单独通过 Apple TV 遥控器来使用应用程序。tvOS 系统将附加控制器的数量限制为两个。

以下是关于访问特定 TV 遥控器功能的一些技术细节:

Apple TV 遥控器按钮或功能 注意事项
触控区域 同时映射到 Input.touchesTouch.type 设置为 Indirect 并被 Unity GUI 忽略)和游戏杆输入 API(例如 Input.GetAxis("Horizontal");)。
触控区域点击 映射到按钮 A,而按钮 A 又映射到游戏杆按钮 14
陀螺仪 映射到 Input.gyroInput.gyro.attitude 派生自重力矢量,因此不会围绕平行于重力矢量的轴进行旋转。Input.gyro.rotationRate 也是同样的情况。
加速 映射到 Input.acceleration

注意__:Input.acceleration 派生自陀螺仪 API,可能有一定的不稳定性。tvOS SDK 没有专用的加速度计 API。 | |暂停/播放按钮 |映射到按钮 X,而按钮 X 又映射到游戏杆按钮 15。 | |菜单按钮 |长按可调用 tvOS 任务切换器。可以覆盖此行为。

应用程序可以通过以下两种方法之一处理短按:

a)__ 如果 UnityEngine.tvOS.Remote.allowExitToHome 为 true,则返回到 tvOS 系统主屏幕。
b)UnityEngine.tvOS.Remote.allowExitToHome 为 false 时,让应用程序响应点按(映射到暂停按钮/游戏杆按钮 0)。这是默认行为。

应用程序应根据当前状态在 a)b) 之间切换:

- 如果用户当前正在与顶层菜单交互,则启用行为 a)
- 如果他们正在与应用程序实时交互,应启用行为 b),并在他们按下此按钮时调用应用内暂停菜单。
轻扫至遥控器的边缘 生成方向键盘 (D-pad) 上/下/左/右按钮按压。有关映射列表,请参阅关于 iOS 游戏控制器支持的文档。

可通过专用 API 控制 Apple TV 遥控器操作模式,如下所示: * UnityEngine.tvOS.Remote.allowExitToHome * UnityEngine.tvOS.Remote.allowRemoteRotation * UnityEngine.tvOS.Remote.reportAbsoluteDpadValues * UnityEngine.tvOS.Remote.touchesEnabled

注意__:当 UnityEngine.Apple.TV.Remote.allowExitToHome 为 false 时,Menu 按钮将映射到游戏杆按钮 0。这会导致与默认的 Input 窗口发生冲突,因为它还使用游戏杆按钮 0 来映射 Submit 虚拟按钮。这将导致 Menu 按钮触发对 UI 元素的操作。要解决此问题,请在 Input 窗口(菜单:__Edit > Project Settings__,然后选择 Input__ 类别)中删除或修改 Submit 虚拟按钮绑定。

通过 Unity UI 设置应用程序导航

必须为 Apple Game Center 的原生排行榜 UI 提供自定义可视化资源。在 Xcode 中设置这些资源的方法如下:

  1. 在 Unity Editor 中打开 Input 窗口。找到第一次出现的 Submit 虚拟输入,将其展开,然后将其 Alt Positive Button 更改为 joystick button 14
  2. 在场景中选择 EventSystem 应用程序对象。在 Inspector 中,找到 EventSystem 组件,并在 First Selected 属性中引用应该接收初始焦点的 UI 应用程序对象。可能需要启用 Standalone Input Module 组件中的 Force input module 属性。

__注意__:应用程序在电视模拟器中运行时,Apple TV 遥控器导航无效。

将排行榜资源添加到 Xcode 项目

Apple Game Center 要求为其原生排行榜 UI 提供自定义可视化资源。在 Xcode 中设置这些资源的方法如下:

  1. 打开您的 XCode 项目
  2. 选择 Images.xcassets
  3. 在列出的文件下面右键单击,然后从显示的菜单中选择 Game Center > New AppleTV Leaderboard
  4. 添加图像。
  5. 选择 Leaderboard__,然后在右侧面板中选择 Edit View__。
  6. Identifier 字段中输入您的排行榜 ID。

提示__:在进行此更改之后,如果资源编译失败,请尝试在 Xcode 的构建设置中禁用 On Demand Resources__ 选项。

实现对按需加载资源 (On Demand Resources) 的支持

tvOS 会限制应用程序可以保留的磁盘空间量。主应用程序安装包大小不能大于 4 GB。其他可下载内容的大小上限对于正在使用的资源最多可达 2GB,总共可下载内容最多可达 20GB。Apple 建议对 tvOS 的可下载内容采用按需加载资源 (On Demand Resources, ODR),此功能为 tvOS 提供了最佳的磁盘空间管理策略。Unity 通过资源包支持 ODR。有关 ODR 实现方式的更多信息,请参阅 Unity 博客掌握 Apple 平台的按需资源 (Mastering on-demand resources for Apple platforms)

已知限制

  • 屏幕键盘仅限于单行输入。
  • tvOS 模拟器不会将 Apple TV 遥控器模拟为应用程序控制器,这意味着应用程序无法访问其输入。
Apple TV
tvOS 构建设置