背景
モスクワを拠点とするゲーム開発会社の Pixonic は、モバイルアプリをアップグレードしてさらに多くのゲーマーにリーチできるよう日々努めています。同社の最も有名なタイトルのひとつである War Robots は、12 人のプレーヤー対プレーヤー(PvP)で、カスタマイズしたロボットを操作して戦闘を行えるゲームです。
2014 年のリリース当初、War Robots は初期の Android デバイス向けに設計され、タッチパッドによる操作は可能でしたが、マウス入力には対応していませんでした。自らも熱心なゲーマーである同社の開発チームは、ノートパソコンやタブレットなど、さまざまなデバイスで快適にプレイできるようにするには、いくつか改善を加える必要があると考えていました。War Robots はすべての Android デバイスですでにプレイ可能でした Chromebook はフルバージョンの Android フレームワークを搭載しているため、 作成します。コーディングを少し調整することで、Pixonic は ChromeOS のメリットをサポートしています。
Pixonic チームが War Robots を大画面向けに最適化した方法を以下に紹介します。
Ultimate Guitar の取り組み
最適化を始めるにあたって、Pixonic は ChromeOS のフルサポートの準備が整ったことをシステムに知らせる AndroidManifest.xml タップ エミュレーションを無効にする必要があります。
<uses-feature android:name="android.hardware.type.pc" android:required="false" />
また、アプリの minSdk を 24 に設定して、Unity ゲームエンジンがマウスクリックとすべての動作に関連する API イベント(タッチパッド イベント以外も含む)を直接受信できるようにしました。
キーボードとマウスのサポート
War Robots のようなサードパーソン PvP ゲームでは、特に大画面のデバイスの場合、キーボードとマウスを使用することで、動いたり照準を合わせたりしやすくなります。このため次の作業として、ゲームの戦闘モードで、タッチスクリーン操作に加えてキーボードとマウスでも操作できるようにコードを書き直すことにしました。
Pixonic チームは、適切なコントロールを適切なタイミングで提供できるように、ユーザーの現在のゲームプレイ モードを確認する新しいコードを作成しました。
@Override
public void onConfigurationChanged(Configuration newConfig) {
boolean hasQwertyKeyboard = newConfig.keyboard == Configuration.KEYBOARD_QWERTY && newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO;
try {
UnityPlayer.UnitySendMessage("Receiver", "ConfigChange", new JSONObject().put("keyboard", hasQwertyKeyboard).toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
QWERTY キーボードが検出されると、ゲームはデスクトップ モードに適応します。左下のジョイスティックの表示は消え、すべてのアクション(武器、アビリティ、メニューの選択など)にキーボード ショートカットが表示されます。
キーボードが検出されなかった場合、左下にジョイスティックが表示され、右下のメニューボタンのキーボード ショートカットは非表示になります。
次に、プレーヤーがマウスを使ってカメラを回転させているときは、カーソルを表示しないようにしました。Android 7.0(API レベル 24)以降を対象にすることで、任意のポインタ アイコンを設定することが可能になります。この例では、透明なビットマップを使用して、ゲームプレイ中のカーソルを非表示にしました。
public boolean setPointerVisibility(boolean visible) {
View = activity.findViewById(android.R.id.content);
view.setPointerIcon(PointerIcon.getSystemIcon(activity, visible ? PointerIcon.TYPE_DEFAULT : PointerIcon.TYPE_NULL));
}
これにより、他のすべてのウィンドウが閉じられた状態で戦闘が行われている場合、カーソルが無効になり、表示されないようになりました。また、一時停止メニューなどのポップアップ ウィンドウが表示されると、カーソルがデフォルトのアイコンで表示されるようにしました。
ゲームプレイのチュートリアルとメカニズムを最適化
Pixonic はユーザー エクスペリエンスを高めるため、ユーザーの現在のデバイスモードに応じたゲームプレイ チュートリアルを表示する新しいコードを記述しました。プレーヤーが戦闘中にタブレット モードとノートパソコン モードを切り替え、新しいモードでこれまでにチュートリアルが表示されたことがない場合は、ゲームプレイを再開する前にチュートリアルが表示されます。
ノートパソコン モードでは、プレーヤーはマウスでカメラを操作するため、タッチスクリーンによるカメラ操作を無効にしましたが、ゲームプレイのボタンはすべて他と同じように動作します。タッチとマウス操作を区別するために、次のように Input.touchCount
プロパティを使用しています(Unity スクリプトの場合)。
if(Input.touchCount > 0) {
// this is screen touch event
} else {
// this is mouse (touchpad) event
}
マルチウィンドウのサポート
Pixonic は最後の作業として、ゲームの起動時に全画面モードでロックされないようにする必要がありました。ChromeOS でウィンドウを使用したゲームプレイを有効にすると、 ユーザーは、お気に入りのストリーミング動画をプレイしながら同時に視聴できます。 スペースで新機能について読んだり、 ゲームのウェブサイトをご覧いただくか、 パッシブ モードで視聴することはできません。
これに対応するために、UnityPlayerActivity
をサイズ変更可能としてマークしました。
<activity android:name="com.unity3d.player.UnityPlayerActivity" ....
android:resizeableActivity="true">
ゲーム インターフェースは特定のサイズ範囲でのみプレイ可能であるため、サポートされる最小ウィンドウ サイズを設定しました。
<activity … >
<layout android:gravity="center" android:minHeight="800dp" android:minWidth="1200dp" />
</activity>
最も臨場感あふれるゲームプレイにはメタタグを使用して、全画面モードをデフォルトに設定し、必要に応じて画面を横向きに設定しました。
<application>
<meta-data android:name="WindowManagerPreference:FreeformWindowSize" android:value="maximize" />
<meta-data android:name="WindowManagerPreference:FreeformWindowOrientation" android:value="landscape" />
….
</application>
こうした最適化により、プレーヤーがゲームプレイ画面のウィンドウ サイズを変更したときに、ゲームが一時停止しないようにし、戦闘用の HUD も合わせてサイズ変更されるようにしました。
結果
オンライン リソースの豊富なライブラリのおかげで、5 人からなる Pixonic の開発チームはわずか 2 週間でこの全プロセスを終えることができました。
それ以来、10 万人以上のプレーヤーが ChromeOS で War Robots をプレイしました Pixonic は最新の最適化をロールアウトしました。画面が大きくなり、使えるスペースが増えたことで、War Robots ではより臨場感のある戦闘が可能になりました。実際に、Chromebook でのユーザーのプレイ時間は他の Android デバイスと比べて 25% 長くなっています。これまでの評判はとても高く、Chromebook 向けに最適化されたゲームは、BlueStacks のエミュレータよりスムーズに動作するという意見もありました。
この成功を基に、Pixonic では、すべての Android デバイスで War Robots のグラフィックを改良して、パソコン版のクオリティに近づける予定です。
ChromeOS 向けにアプリを最適化するおすすめの方法をご覧ください。