このマニュアルページは、デベロッパーが iOS から tvOS に移行することを主な目的としています。tvOS として知られる Apple TV プラットフォームは、iOS プラットフォームの基礎の上に構築されていますが、アプリケーション開発者にとっては新たな課題も生まれています。既存の iOS アプリケーションを tvOS 上に展開するのは簡単にできますが、多くの場合、アプリケーションのコンテンツを tvOS の入力コントロールで動作したり、大画面で正しく表示できるように調整する必要があります。
tvOS 向けの開発には、以下が必要です。
アプリケーションの別のブランチまたはコピーを作成し、それを Apple TV にポートするのが最善の方法です。Apple TV は iOS フレームワークのサブセットしかサポートしていないため、多くの iOS プラグインには Apple TV との互換性がありません。サードパーティ製のプラグインとそのクロスプラットフォームの互換性に関して、Unity は制御できません。
アプリケーションがディスク上で 4GB 以上使用する場合は、小さなパーツに分割してオンデマンドリソースを使用してください。詳しくは、以下の オンデマンドリソース のセクションを参照してください。
ノート: bitcode は tvOS のビルドに含まれており、実行ファイルに約 130 MB を追加します。App Store のサーバーはこのコードを取り除きます。そのため、配布サイズには影響しません。bitcode のサイズを見積もるには、otool -l
を使ったコマンドラインを通して、実行ファイルの LLVM セクションを分析してください。
tvOS の入力は大きく分けて 2 つあります。
Apple TV Remote (Siri Remote) は、従来のメニューナビゲーションコントローラー、アプリケーションコントローラー、ジャイロスコープ、加速度センサー、そして、タッチジェスチャーデバイスとして機能する多目的入力デバイスです。Unity は、Apple TV Remote の入力を対応する Unity API にルーティングしますが、その入力に対して他の処理は行いません。
Apple TV Remote の特定の入力機能を利用するためには、アプリケーションの入力スキームを調整する必要があります。例えば、アプリケーションはそれを、1 つのアナログ軸と追加のアクションボタンを備えた従来のアプリケーションコントローラーとして扱うことができます。また、アプリケーションはステアリングなどのインタラクションのために加速度計として使用することができます。tvOS にアプリケーションをポートする際には、さまざまな方式を試すことができます。
Unity では、iOS と tvOS 向けに標準化されたコントローラーサポートである Made For iOS (MFi) を提供しています。MFi コントローラーは、すぐに使える入力マッピングを提供しており、Unity エディターでカスタムアクションマッピングを設定することができます (メニュー: Edit > Project Settings… と移動し、Input カテゴリを選択)。詳細については、iOS Game Controller への対応 に関するドキュメントや、Apple 開発者ドキュメントの Game Controllers を参照してください。
Apple TVデバイスには、さらに2つのワイヤレスMade For iOS(MFi)アプリケーションコントローラを接続することで、実質的にゲーム機にすることができます。アプリケーションはiOSのMFiコントローラと同じようにコントローラを使うことができますが、Apple TV Remoteだけで使い勝手を確保する必要があります。tvOSシステムでは、追加コントローラーの数は2つに制限されています。
ここでは、特定の TV Remote の機能にアクセスするための技術的な詳細を説明します。
Apple TV Remote のボタンや機能 | ノート |
---|---|
タッチエリア |
Input.touches (Touch.type は Indirect に設定されており、Unity GUI では無視されます) と Joystick Input API (例えば Input.GetAxis("Horizontal"); ) の両方にマップされます。 |
タッチエリアクリック | ボタン A にマップし、次に joystick button 14 にマップされます。 |
ジャイロスコープ |
Input.gyro にマップします。Input.gyro.attitude は重力ベクトルから派生しているため、重力ベクトルに平行な軸を中心に回転しません。同じことが Input.gyro.rotationRate にも当てはまります。 |
加速 |
Input.acceleration にマップします。ノート: Input.acceleration はジャイロスコープ API から派生したもので、不安定な部分があるかもしれません。tvOS SDK には、専用の加速度センサー API はありません。 |
一時停止/再生ボタン | ボタン X にマップされ、次に joystick button 15 にマップされます。 |
Menu ボタン | 長押しすると、tvOS のタスクスイッチャーが呼び出されます。 アプリケーションは以下の 2 つの方法で短いタップを処理できます。 ** a)** UnityEngine.tvOS.Remote.allowExitToHome が true の場合、tvOS システムのホーム画面に戻ります。** b)** UnityEngine.tvOS.Remote.allowExitToHome が false の場合、タップ (一時停止ボタン/joystick button 0 にマップ) にアプリケーションが反応するようにします。アプリケーションは、現在の状態に基づいて a) と b) を切り替える必要があります。 - ユーザーが現在トップメニューを操作している場合は、動作 a) を有効にします。 - ユーザーがリアルタイムでアプリケーションを操作している場合は、動作 b) を有効にし、ユーザーがこのボタンを押したときにアプリケーション内の一時停止メニューを呼び出します。 |
リモコンの端までスワイプ | 方向パッド (D パッド) の上下左右のボタン押下を生成します。マッピングのリストについては、iOS Game Controller への対応 のドキュメントを参照してください。 |
専用の API を使って Apple TV Remote 操作モードを以下のように制御することができます。
* UnityEngine.tvOS.Remote.allowExitToHome
* UnityEngine.tvOS.Remote.allowRemoteRotation
* UnityEngine.tvOS.Remote.reportAbsoluteDpadValues
* UnityEngine.tvOS.Remote.touchesEnabled
ノート: UnityEngine.Apple.TV.Remote.allowExitToHome
が false の場合、Menu ボタンは joystick button 0 にマップされます。これは、デフォルトのInput ウインドウでもjoystick button 0 を使って Submit 仮想ボタンをマッピングしているため、競合が発生します。この結果、MenuボタンがUI要素のアクションを引き起こすことになります。この問題を解決するには、Input ウィンドウの Submit 仮想ボタンのバインディングを削除または変更します (メニュー: Edit > Project Settings 、次に Input カテゴリを選択)。
Apple Game Center のネイティブのリーダーボード UI には、カスタム視覚リソースを提供する必要があります。ここでは、Xcode でそれらを設定する方法を説明します。
ノート: アプリケーションが TV Simulator で実行されている間は、Apple TV Remote ナビゲーションは動作しません。
Apple Game Center では、ネイティブのリーダーボード UI のカスタム視覚リソースを提供する必要があります。ここでは、Xcode でそれらを設定する方法を説明します。
ヒント: この変更を行った後、アセットのコンパイルに失敗する場合は、Xcode のビルド設定で On Demand Resources オプションを無効にしてみてください。
tvOS では、アプリケーションが確保できるディスク容量が制限されています。メインアプリケーションのインストールのバンドルサイズは 4 GB を超えることはできません。追加のダウンロードコンテンツの制限は、使用中のアセットは 2 GB まで、ダウンロード可能なコンテンツの合計は 20 GB までです。Apple は、tvOS のダウンロードコンテンツには、tvOS の最適なディスクスペース管理である ODR (オンデマンドリソース) を推奨しています。Unity では、Asset Bundle を通して ODR をサポートしています。ODR の実装に関する詳細は、Unity ブログ Appleプラットフォームのオンデマンドリソースを極める を参照してください。