WebGL での入力
iOS

Apple TV

Apple TV プラットホームは、 iOS プラットホームの設立時に構想され、同時に、ゲーム開発者に新しいパラダイムと挑戦をもたらしました。すでに存在するモバイル用ゲームを tvOS に展開するのは、いつものようにワンクリックするだけですが、ゲームコンテンツを新しい入力装置でうまくプレイできるように改善したり、大きなテレビ画面でプレイされる事を考慮しなければいけなくなる事があります。このマニュアルページは、 iOS から 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 の各機能にアクセスする方法を技術的に説明します。

  • iOS Game Controller サポートをまだゲームに組み込んでいないのなら、 MFi Game Controller を参照してください。Unity エディターの Edit->Project Settings->Input から、カスタムアクションマッピングを設定して、このマニュアルに書かれたマッピングを使ってください。
  • Apple TV Remote のタッチエリアは Input.touches (Touch.type は “Indirect” に設定され、 Unity GUI からは無視されます) と、 Input.GetAxis(“Horizontal”); などのジョイスティック入力の API 両方にマップされます。
  • Remote の加速度とジャイロは、それぞれ Input.acceleration と Input.gyro にマップされます。 Input.acceleration は内部的にはジャイロの API から提供されているので、やや不安定かもしれません。残念ながら tvOS SDK には、加速度専用の API はありません。 Input.gyro.attitude は重力ベクトルを元にしており、そのため、重力ベクトルと平行な軸周りの回転はありません。 Input.gyro.rotationRate も同様です。
  • リモコンの Pause/Play ボタンは “X” ボタンにマップされます (その後、 joystick button 15 にマップされます)。
  • Remote のタッチエリアのクリックは、 “A” ボタンにマップされます (その後、 joystick button 14 にマップされます)。
  • このデバイスのメニューボタンは、独特の動作をします。長押しすると、タスク切り替えが呼び出されます。この動作は変更することができません。短く押した場合には、 2 種類の処理があります。
  • a) システムのホーム画面を実行する (UnityEngine.Apple.TV.Remote.allowExitToHome が true の場合)
  • b) アプリに反応させる (UnityEngine.Apple.TV.Remote.allowExitToHome が false の場合、 “Pause” / joystick button 0) ボタンにマップされます。これがデフォルトの挙動となります) プレイヤーの状況によって、アプリでは a) と b) を切り替える事ができます。プレイヤーがトップメニューにいる場合は、 a) の動作をさせた方が良いでしょうし、ゲーム中ならば、 b) の方が好ましいでしょう。
  • また、ゲーム中にこのボタンが押されたら、ポーズメニューを呼び出します。
  • Apple TV remote では、リモコンのフチをスワイプすることによって、デジタルパッドの上下左右も入力できます。マッピングに関しては Unity マニュアルの iOS Game Controllers ページを参照してください。 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 台までです。

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

TV Remote で Unity GUI を操作する設定

  • Unity エディターで Project の Input 設定を開きます。 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 を選択します。
  • ここに画像を追加します。
  • リーダーボードを選択して右側にある編集画面を選択します。“Identifier” フィールドを選択して、リーダーボードのIDを入力します。
  • 今までの設定作業をした後に、アセットのコンパイルが失敗し始めたときは、 Xcode の “Build Settings” にある “On Demand Resources” を無効にしてください。

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

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

既知の制限

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