強火で進め

このブログではプログラム関連の記事を中心に書いてます。

Unity での Apple TV ビルドについてのメモ

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世代モデル

Touch サーフェスのボタン的な操作は2種類

Touch サーフェスのボタン的な操作はタッチとクリックの2種類が有ります。タッチは触るだけ、クリックはカチッという感触が有るまで押し込む動作です。

uGUI のフォーカス移動は Touch サーフェス のスワイプで可能

uGUI の InputField や Button のフォーカスは Touch サーフェスのスワイプで可能です。


Appleの公式サイトから引用

デフォルトの設定だとフォーカスが当たった時にも色の変化が少ないのでパッと見、切り替わりが分かりづらいです。この辺りはもっと分かりやすい色に変更した方が良い気がします。

変更する場所は Transition の Highlighted Color です。

ボタン

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/