tvOS は iOS を基盤に構築されていますが、tvOS の入力機能に合わせたコンテンツの調整や、より大画面でのディスプレイ表示など、新たな課題も発生します。
tvOS の入力は大きく分けて 2 つあります。
Apple TV Remote (Siri Remote) は、従来のメニューナビゲーションコントローラー、アプリケーションコントローラー、ジャイロスコープ、加速度センサー、そして、タッチジェスチャーデバイスとして機能する多目的入力デバイスです。Unity は、Apple TV Remote の入力を、対応する Unity API にルーティングしますが、その入力に対して他の処理は行いません。Apple TV Remote 固有の入力機能を利用するには、アプリケーションで入力スキームの調整が必要な場合があります。例えば、アプリケーションは Apple TV Remote を 1 つのアナログ軸とその他のアクションボタンによる従来のアプリケーションコントローラーとして扱ったり、ステアリングなどの操作に加速度センサーを使用したりできます。アプリケーションを tvOS にポートする際、さまざまなスキームを試すことができます。
Unityは、iOS と tvOS の標準コントローラーサポートである Made For iOS (MFi) を提供しています。MFi コントローラーには、すぐに使用できる入力マッピングが用意されており、Edit > Project Settings > Input Manager からカスタムアクションのマッピングを設定できます。詳細は、ゲームコントローラーの入力処理とゲームコントロールを参照してください。
Apple TV デバイスには、さらに 2 つのワイヤレス MFi コントローラーを接続できるため、実質的なコンソールとして使用できます。アプリケーションは、MFi コントローラーを iOS の MFi コントローラーと同じように使用できますが、Apple TV Remote だけでも使用できるようにする必要があります。tvOS システムでは、追加コントローラーの数は 2 つに制限されています。
ここでは、特定の 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 パッド) の上下左右のボタン押下を生成します。 マッピングのリストについては、ゲームコントローラー入力マッピングを参照してください。 |
専用の API を使って Apple TV Remote 操作モードを以下のように制御することができます。
ノート: UnityEngine.tvOS.Remote.allowExitToHome が false の場合、Menu ボタンは joystick button 0 にマップします。これは、デフォルトの Input ウインドウでも joystick button 0 を使って Submit 仮想ボタンをマッピングしているため、競合が発生します。この結果、Menu ボタンが UI 要素のアクションをトリガーすることになります。この問題を修正するには、Input ウィンドウの Submit 仮想ボタンのバインディングを削除または変更します (メニュー:Edit > Project Settings、Input カテゴリを選択)。