本手册页的主要目的是帮助开发者从 iOS 过渡到 tvOS。Apple TV 平台(也称为 tvOS)建立在 iOS 平台的基础上,但也给应用程序开发者带来了新的挑战。您可以轻松地在 tvOS 上部署现有的 iOS 应用程序,但是通常必须调整应用程序的内容以兼容 tvOS 输入控件,并在更大的屏幕上正确显示。
要进行 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 遥控器(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.touches (Touch.type 设置为 Indirect 并被 Unity GUI 忽略)和游戏杆输入 API(例如 Input.GetAxis("Horizontal"); )。 |
触控区域点击 | 映射到按钮 A,而按钮 A 又映射到游戏杆按钮 14。 |
陀螺仪 | 映射到 Input.gyro 。Input.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 虚拟按钮绑定。
必须为 Apple Game Center 的原生排行榜 UI 提供自定义可视化资源。在 Xcode 中设置这些资源的方法如下:
__注意__:应用程序在电视模拟器中运行时,Apple TV 遥控器导航无效。
Apple Game Center 要求为其原生排行榜 UI 提供自定义可视化资源。在 Xcode 中设置这些资源的方法如下:
提示__:在进行此更改之后,如果资源编译失败,请尝试在 Xcode 的构建设置中禁用 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)。