Unity ゲームをあらゆるフォーム ファクタで優れたものにする

競争が激化する現在のゲーム市場では、可能な限り幅広いオーディエンスにリーチすることがこれまで以上に重要になっています。スマートフォン、タブレット、折りたたみ式デバイス、パソコンなど、さまざまなフォーム ファクタ向けのゲームを開発することで、より多くの潜在的なプレーヤーを取り込み、成功の可能性を高めることができます。

画面サイズ変更のサポート

さまざまなフォーム ファクタをサポートするには、ゲームのサイズを変更できるようにする必要があります。サイズ変更が可能になることで、ゲームは縦向きと横向き、マルチウィンドウ モード、折りたたみ式デバイスの折りたたみ状態と展開状態などのデバイス構成をサポートできます。

ゲームがすべてのウィンドウ サイズと向きの構成をサポートしていない場合、プラットフォームはゲームを互換モードでレターボックス表示し、サポートされていない構成に変更する前に必要に応じてプレーヤーにメッセージを表示します。

図 1.構成の互換性ダイアログ。

詳細については、大画面のサイズ変更のサポートをご覧ください。

マルチ ウィンドウ モード

図 2.デスクトップとテーブルトップ形状の折りたたみ式デバイスで異なる UI が表示される。

マルチ ウィンドウ モードを使用すると、複数のアプリで同じ画面を同時に共有できます。アプリを左右または上下に並べて表示することも(分割画面モード)、1 つのアプリを小さなウィンドウで他のアプリに重ねて表示することも(ピクチャー イン ピクチャー モード)、個々のアプリを個別の移動可能でサイズ変更可能なウィンドウに表示することもできます(フリーフォーム モード)。

ゲームがマルチウィンドウ モードで実行されているときに互換モードにならないようにするには、Unity ビルド設定で [Resizable Window] オプションを有効にして、ゲームがサイズ変更可能であることを宣言します。

図 3.Unity の Android 向け解像度とプレゼンテーションの設定

ディスプレイ カットアウト

ディスプレイ カットアウトとは、一部のデバイス上のディスプレイ面まで広がっている領域のことです。カットアウトにより、デバイスの前面に重要なセンサーのスペースを確保しながら、エッジ ツー エッジのエクスペリエンスを実現できます。

図 4.ディスプレイ カットアウト。

ゲームにエッジ ツー エッジのエクスペリエンスを提供するには、セーフフレーム対応にゲームを構成します。Unity の safeArea API にクエリを実行して画面のセーフエリアをピクセル単位で取得し、それに応じてゲームの UI と UX(特にユーザーが操作できる要素)を調整します。

折りたたみ式デバイスの形状

折りたたみ式デバイスには、FLAT(完全に開いた状態)や HALF_OPENED(完全に開いた状態と閉じた状態の間)など、さまざまな折りたたみ状態があります。デバイスが HALF_OPENED 状態のときは、折りたたみの向きに応じて、テーブルトップ形状(折り目が水平方向)とブック形状(垂直方向の折り目)の 2 つの形状が可能です。テーブルトップ形状を使用して、プレーヤーの没入感とエンゲージメントを高めます。

図 5.ディスプレイの垂直部分にメインビュー、水平部分にコントロールを表示したテーブルトップ形状のゲーム。

テーブルトップ形状を実装するには、デフォルトの Unity アクティビティを拡張し、Jetpack WindowManager レイアウト ライブラリを使用してゲームを折りたたみ対応にする必要があります。

Unity サンプル プロジェクト

Unity サンプル プロジェクトは、Unity 2D デモンストレーション プロジェクトの Lost Crypt に基づいています。このサンプル プロジェクトでは、Unity で大画面のサイズ変更をサポートする方法を紹介します。大画面と折りたたみ式デバイスをサポートするには、Unity ビルド オプションにいくつかの変更を行うとともに、カメラと UI キャンバスのレイアウトに関する考慮事項があります。

サンプル プロジェクトは今すぐダウンロードできます。このプロジェクトには 4 つの異なるシーンが含まれています。

  • オリジナル: サイズ変更可能な基本的な機能のサポート
  • アンカー: 「オリジナル」シーンと同じですが、さまざまなアスペクト比に適応し、ディスプレイ カットアウトを回避できます
  • HingeAware: 「アンカー」シーンと同じですが、テーブルトップ形状をサポートします。
  • Mainmenu: シーンを開始します。他のシーンに移動でき、デバイスの向き、折りたたみ、展開、テーブルトップ形状のすべてを完全にサポートします。

Android 用にビルドする場合は、すべてのシーンを選択し、「Mainmenu」シーンを開始シーンとして設定します。

図 6. 「Mainmenu」シーンでは、テーブルトップ形状で他のシーンに移動できます。

サイズ変更可能なウィンドウのサポートから始める

Android の大画面アプリにさまざまなディスプレイ サイズとアスペクト比のサポートを実装して、ゲームやアプリがさまざまなデバイスで正しく表示されるようにします。Unity のビルド設定で [Resizable Window] プロパティを設定することで、ゲームのサイズ変更とアスペクト比の変更が可能になります(「マルチウィンドウ モード」セクションをご覧ください)。さまざまな画面に合わせてカメラとキャンバスのアスペクト比を調整します。[Build Settings] と Plugins/Android/AndroidManifest.xml ファイルでプロジェクト設定を表示します。プロジェクトの「オリジナル」シーンで、サイズ変更可能な全画面表示機能を体験してください。

図 7. 「オリジナル」シーンはサイズ変更可能なウィンドウ機能をサポートしています。

ディスプレイ カットアウトを処理しながら臨場感あふれる全画面表示にする

ゲームが画面全体を使用して没入感のあるゲームプレイを提供し、ユーザー エクスペリエンスを向上させられるようにします。画面サイズに合わせて自動的に調整されるように、ゲーム UI のアンカー設定とカメラ設定を更新します。これにより、UI 要素を画面サイズに対する相対位置で維持できます。

「Anchoring」シーンでは、CameraAspectLock スクリプトを使用し、拡張アクティビティAssets/Plugins/Android/LargeScreenPlayableActivity.java を参照)によってデバイス構成の変更に応答します。Unity の safeArea API は、SafeZoneAPI スクリプトで示されています。このスクリプトは、「Anchoring」シーン内の SafeZone オブジェクトにバインドします。

折りたたみ式デバイスの内側と外側のディスプレイにゲームシーンが全画面表示されている。
図 8. ディスプレイ カットアウトがある「アンカリング」シーン

折りたたみ式デバイス向けに最適化する

Unity サンプル プロジェクトの最後のシーン「HingeAware」には、Jetpack ライブラリ API拡張アクティビティAssets/Plugins/Android/LargeScreenPlayableActivity.java を参照)を介して、ターゲット デバイスのさまざまな折りたたみ状態に応答する ConfigurationManager オブジェクトが含まれています。このシーンでは PanelOnFold スクリプトを使用して、デバイスの折りたたみ状態に基づいて UI を制御します。たとえば、デバイスがテーブルトップの形状になっているときに下部のコントローラ パネルを表示します。

図 9. 「HingeAware」シーンはテーブルトップ形状をサポートします。