Apple TV
WebGL

Apple TV

このマニュアルページは、 iOS から tvOS への移植を手助けすることを主眼においています。Apple TV プラットホーム(tvOS)は、 iOS プラットホームの設立時に構想され、ゲーム開発者に新しいパラダイムと挑戦をもたらしました。すでにモバイル用のゲームがあるなら、ワンクリックするだけで tvOS に配信できますが、Unityのインプット制御で正しく動作するようにゲームを改造したり、大きなテレビ画面でプレイされる事を考慮しなければいけなくなる事があります。

前提条件

tvOS向けの開発には、以下のものが必要です。

  • 第 4 世代の Apple TV 機器。 ( USB C <-> USB 3.0 ケーブルも必要です。これは、一般販売パッケージには含まれていません )
  • Xcode 7.1 以降のバージョン。
  • iOS 端末と同じ方法で、デバイスにプロビジョニングを設定する必要があります。まずは Xcode を使って空の tvOS アプリを作成し、プロビジョニングが正しく動くかどうかテストすることをお勧めします。

開発前に知っておくこと

  • 多くの iOS プラグインは、iOS フレームワークのサブセットしかサポートしていないため、 Apple TV とは互換性がありません。Apple TV 用に、ゲームのブランチかコピーを別に用意して、そこに移植することをお勧めします。プラグイン提供者にプラグインのアップデートを依頼することを忘れないようにしてください。
  • ゲームタスクがディスク上で 200MB 以上ある場合、より細かいパーツに分割し、オンデマンドリソース を使います。Unity のオンデマンドリソースのサポートに関しては、以下のオンデマンドリソース セクションを参照してください。ビットコードは、tvOS のビルド時に最大 130MB 程度が追加される事に注意してください。この追加分は、App Store のサーバーで外されるので、配信時のサイズにはカウントされません。 LLVM 分析セクションで otool -l をつけて実行することで、ビットコードのサイズを見積もる事ができます。

入力の実装

Apple TV Remote (Siri Remote) は、古典的なメニューによる操作、ゲームコントローラー、ジャイロと加速度センサー、タッチジェスチャーデバイス等で使う事ができる、多目的の入力デバイスです。 TV Remote での入力は、 Unity で最小限の処理が行われ、大抵は Unity の API と連携します。

一般的に、どんなゲームでも Apple TV Remote の独特な入力機能を効果的に使うため、入力方法に多少の調整が必要になります。あるゲームでは、アナログスティックと複数のアクションボタンを持つ古典的なゲームコントローラーのように扱うのが一番効果的かもしれません。中には、加速度センサーをステアリングに使うのがよいゲームもあるでしょう。 tvOS にゲームを配信するときには、いくつかの方法を試してみた方がよいです。

特定の TV Remote の各機能にアクセスする方法を技術的に説明します。

  • NFi 認証のゲームコントローラーサポートをまだゲームに組み込んでいない場合は、 iOS Game Controller への対応 を参照してください。Unity エディターの Edit > Project Settings > Input で、カスタムアクションマッピングを設定して、リストにあるマッピングを使ってください。
  • Apple TV Remote のタッチエリアは Input.touches (Touch.typeIndirect に設定され、 Unity GUI からは無視されます) と、 Input.GetAxis("Horizontal"); などのジョイスティック入力の API 両方にマップされます。
  • Remote の加速度とジャイロは、それぞれ Input.accelerationInput.gyro にマップされます。 Input.acceleration は内部的にはジャイロの API から提供されているので、やや不安定かもしれません。残念ながら tvOS SDK には、加速度専用の API はありません。 Input.gyro.attitude は重力ベクトルを元にしており、そのため、重力ベクトルと平行な軸周りの回転はありません。 Input.gyro.rotationRate も同様です。
  • リモコンの Pause/Play ボタンは “X” ボタンにマップされます (その後、 joystick button 15 にマップされます)。
  • Apple TV の Remote のタッチエリアのクリックは、 “A” ボタンにマップされます (その後、 joystick button 14 にマップされます)。
  • このデバイスのメニューボタンは、独特の動作をします。長押しすると、タスク切り替えが呼び出されます。この動作は変更することができません。短く押した場合には、 2 種類の処理があります。
    • a) システムのホーム画面を実行する (UnityEngine.Apple.TV.Remote.allowExitToHometrue の場合)
    • b) UnityEngine.Apple.TV.Remote.allowExitToHomefalse のときに、アプリをタップに反応させます (“Pause” / joystick button 0) にマップされます)。これがデフォルトの挙動となります。
    • アプリケーションは、現在の状態に基づいて a)b) との間で切り替えをします。ユーザーがトップメニューを操作するとき、 a) のビヘイビアを有効にします。リアルタイムでゲームを操作している場合は b) のビヘイビアを有効にし、このボタンが押されるとインゲームのポーズメニューを起動します。
  • Apple TV remote では、リモコンのフチをスワイプすることによって、デジタルパッドの上下左右も入力できます。マッピングに関しては Unity マニュアルの iOS Game Controller への対応 ページを参照してください。
  • Apple TV remote の操作モードは、専用の API から制御できます。
    • UnityEngine.Apple.TV.Remote.allowExitToHome
    • UnityEngine.Apple.TV.Remote.allowRemoteRotation
    • UnityEngine.Apple.TV.Remote.reportAbsoluteDpadValues
    • UnityEngine.Apple.TV.Remote.touchesEnabled
  • Apple TV box をゲーム機にして、さらに 2 台のワイヤレス MFi ゲームコントローラーを接続することができます。 Apple TV Remote 単体でプレイ可能なゲームだったとしても、iOS MFi コントローラーと同じ方法(前述した方法)で、ゲームから利用することができます。今のところ、追加できるコントローラーの数は 2 台までです。これは、確認されている tvOS システムの制限のためです。

注意 UnityEngine.Apple.TV.Remote.allowExitToHomefalse に設定され、デフォルト入力マネージャーが “Submit” のバーチャルボタンを joystick button 0 にまとめている場合、“Menu” ボタンも同じく joystick button 0 とされているため、“Menu” ボタンを押すと、UI エレメント上でアクションをトリガーします。 この問題を回避するには、input managerで “Submit” バーチャルボタンバインディングを削除するか、変更する必要があります。

TV Remote で Unity GUI 操作の設定

  • Unity エディターで Project の Input Manager を開きます。 virtual input の項目である最初の “Submit” を選択し、展開して “Alt Positive Button” を “joystick button 14” に変更します。

  • シーン内で EventSystem ゲームオブジェクトを選択します。インスペクターで、EventSystem コンポーネントを見つけ、“First Selected” フィールドに最初にフォーカスを得る UI ゲームオブジェクトを入力します。“Standalone Input Module” コンポーネントでは “Force input module” フラグをチェックする必要があるかもしれません。

  • すべてが正しく行われると、エディター実行中であれば UI をキーボードから操作できるようになり、デバイス実行中には TV Remote のスワイプとクリックで UI を操作できるようになります。

注意: TV Remote による操作は、 TV Simulator では機能しません。

Xcode プロジェクトにリーダーボードを追加

ゲームセンターでは、ネイティブのリーダーボードの UI に提供するカスタムビジュアルリソースが必要です。ここでは、 Xcode にリソースを追加する方法を簡単に説明します。

  • Xcode プロジェクトで Images.xcassets を選択します。
  • ファイルリストで右クリックして、メニューから Game Center > New AppleTV Leaderboard を選択します。
  • ここに画像を追加します。
  • リーダーボードを選択して右側にある Edit View を選択します。“Identifier” フィールドを選択して、リーダーボードのIDを入力します。
  • 今までの設定作業をした後に、アセットのコンパイルが失敗し始めたときは、 Xcode の “Build Settings” にある “On Demand Resources” を無効にしてください。

オンデマンドリソースサポートの実装

tvOS は、アプリケーションが予約できるディスクスペースを厳密に要求します。メインのアプリケーションをインストールするバンドルサイズは 200MB を超える事ができません。と言っても、ダウンロード可能な追加コンテンツの限界値は、もっと多いです(使用中のアセットで 2GB まで、ダウンロード可能なコンテンツ全体で 20GB まで)。アップルは、tvOS のダウンロード可能なコンテンツに、オンデマンドリソース (ODR) を使用することを推奨しています。それにより tvOS 向けにディスクスペース管理が最適化されます。 Unity はアセットバンドルで ODR をサポートしています。 ODR 実現のためのガイドは、専用ページ blogpost にあります。

既知の制限

  • オンスクリーンキーボードには、入力欄が 1 行しかありません。
  • tvOS Simulator では TV Remote をゲームコントローラーとしてエミュレートしないので、入力してもゲームにアクセスできません。
Apple TV
WebGL