Unity で Apple TV 向けビルドを行った所、色々ハマりポイントが有ったのでメモしておきます。
Apple TV ビルドは iOS ビルドとは別コンポーネント
Apple TV は tvOS で動作しており、 Unity のモジュールも別です。
最初、 iOS プラットフォームでビルドしてその後、 Xcode プロジェクトをいじって Apple TV 対応してビルドしようとしてましたが途中で「この方法は流石に違うだろ?」と調べ直した所、別途 tvOS 用のコンポーネントが存在する事を発見。 Unity を再インストールし、 tvOS を追加する事ですんなりビルドできました。
因みに Apple TV(※) と Mac とを USB-C のケーブルで接続しておくと Xcode でビルドするとそのまま iPhone の時と同様にインストール&アプリ起動が行われました。(お手軽!!)
※第4世代モデル
uGUI のフォーカス移動は Touch サーフェス のスワイプで可能
uGUI の InputField や Button のフォーカスは Touch サーフェスのスワイプで可能です。
デフォルトの設定だとフォーカスが当たった時にも色の変化が少ないのでパッと見、切り替わりが分かりづらいです。この辺りはもっと分かりやすい色に変更した方が良い気がします。
ボタン
Siri Remote は Unity 側では以下のボタンが対応しています。
Siri Remote のボタン | Unity 側のボタン名 |
---|---|
Touch サーフェスをクリックした時 | joystick button 14 |
再生/一時停止ボタン | joystick button 15 |
MENU ボタン | joystick button 0 |
※ MENU ボタンについては以下で説明する設定をした時のみ使用可能。なお、長押しした場合には本来の動作が行われる事に注意。
MENU ボタンは Submit ボタン
MENU ボタンを押した場合にはデフォルトではアプリが終了し、ホーム画面に戻ります。
しかし、 UnityEngine.Apple.TV.Remote.allowExitToHome に false を設定すると MENU ボタンについても Unity にてイベントが取れる様になります。
MENU ボタンでは joystick button 0 のイベントが発生し、Unity の Input (メニューから Edit > Project Settings > Input )では Submit 処理が割り当てられています。
その為、 MENU ボタンを押すと uGUI で現在フォーカスの当たっているものをクリックするという動作が発生します。
InputField にフォーカスが当たっている時に MENU ボタンを押すと InputField へのテキスト入力画面に切り替わります。 Button にフォーカスが当たっている時に MENU ボタンを押すとボタンが押されます。
Touch サーフェスによる方向キー入力
Touch サーフェス部分でアナログの方向キー情報を取得可能です。 Input.GetAxis ("Horizontal") で横方向、 Input.GetAxis ("Vertical") で縦方向の入力値が取得できます。
横方向は左端が-1、右端が1、縦方向は下端が-1、上端が1の範囲となるアナログ値が返されます。
Apple TV 環境専用の API
Apple TV 環境専用の API として以下の API が有ります。
※使用時には using UnityEngine.Apple.TV; の記述の追加が必要。
- Remote.allowExitToHome
- Remote.allowRemoteRotation
- Remote.reportAbsoluteDpadValues
- Remote.touchesEnabled
API | 説明 | デフォルト値 |
---|---|---|
allowExitToHome | false の時、 MENU ボタンを押した時にホームに戻らない(長押しの場合には戻る)。また、 MENU ボタン を押した時に joystick button 0 のイベントが発生する | true |
allowRemoteRotation | true の時、 Touch サーフェスでの入力を Siri Remote 現在の向きに合わせた値で返す。例えば uGUI のフォーカス遷移が横向きで持っている時にも上下スワイプでフォーカスの遷移方向が上下となる | false |
reportAbsoluteDpadValues | true の時、タッチした位置の絶対座標値を返す。false の時はタッチだけでは値は返さず、タッチした後にスライドすると値を返す | false |
touchesEnabled | true の時、 Input.touches にタッチ情報が格納される | true |
Plugin 使用時の注意
iOS 向けに作成された Unity の Plugin は tvOS 上では動作しない可能性が有ります。 Plugin を使用する場合には事前にしっかりとチェックしましょう。
関連情報
Unity - Manual: Building games for Apple TV
https://docs.unity3d.com/Manual/tvOS.html
Unityで開発されたApple TVゲームがリリース! – Unity Blog
https://blogs.unity3d.com/jp/2015/10/30/first-madewithunity-games-shipping-for-apple-tv/