このマニュアルページは、デベロッパーが 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プラットフォームのオンデマンドリソースを極める を参照してください。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.