『モンスターウォーク』でのバッテリー駆動時間の最適化

Talofa GamesのCEO、ジェニー・シュウ氏へのインタビューをご覧ください。同氏は、シームレスな背景体験を実現するための技術的な課題や開発上の判断について解説しています。具体的には、チームがUnityの「OnApplicationFocus」や「OnApplicationPause」フックを活用してゲームの状態を保存している方法についても触れています。
ジェニー・シュー:『モンスターウォーク』の構想を練り始めた当初、私たちが解決しようとしていた核心的なデザイン上の課題は、現実世界で歩くような「ステップ」の動きを、いかにしてゲームプレイのような感覚に変えられるかという点でした。まるで面倒な作業のように感じられるわけではなく、無理やり付け足されたような印象もありません。フィットネスアプリとゲームという、別々のものが寄せ集められたような感じではなく、まさに現実の生活でより健康になることを通じて楽しむゲームそのものです。
最大の技術的課題は、ライブデータのようなリアルタイムの要素を、背景配信やバッテリー駆動時間といった様々なプラットフォーム上の制約がある中でも、ゲーム体験とのインテグレーションをシームレスに行うことでした。私たちにとって重要なのは、リアルタイムのステップ計測機能と、プレイヤーがフィットネスへの取り組みを継続できるよう、その機能によるプレッシャーや報酬の感覚を適切に調整することでした。
ステップデータストリームの統合
Unityを採用したおかげで、AndroidとiOSの両方のネイティブプラグインへの連携が非常にスムーズに行えました。また、Android Health ConnectやGoogle Fit、Garminなど、ゲームに連携されるあらゆるデータソースにも対応しています。そして、そのすべての情報をまとめて、前回ゲームにログインしてから次に起動するまでの間に、プレイヤーがどれくらいのステップを遂げたかを伝える必要があります。
幸いなことに、UnityにはネイティブAPIを利用できる機能が備わっています。でね、Health Connectが使えるとは限らないから、ある時点で自分たちでステップ計まで作っちゃったんだ。彼らがGoogle Fitを利用しているとは想定できなかった。たぶん、彼らには何もなかったのだろう。そこで、Unityに組み込むネイティブプラグインを開発しました。これはすべてシームレスに動作し、アプリを閉じた状態でも背景でステップ数を計測し続けます。
そこで、それを実現するために、Unityプロジェクト内で3レイヤーに近いソリューションをビルドする必要がありました。その一方で、バッテリーをあまり消費しすぎたり、常に背景で動作し続けたりして、プレイヤーがアンインストールしたくなるようなことになってはいけません。
また、入手したすべてのデータの整合性を取る際も、同様のことが言えました。Appleの場合、Apple Healthがあり、アプリが起動している状態でスマホが揺れたときなど、プレイヤーがステップを踏んだ際にカウントされるような、ネイティブなフォアグラウンドステップ計測機能があります。また、Apple Healthもその時点でステップ数を計測しています。
では、重複データをどのように統合すればよいのでしょうか?どうすれば、やりすぎず、かといって物足りなくもないバランスにできるでしょうか?「最適なバランスを見極め、プレイヤーが使用しているデバイスのモデルに合わせて最適な体験を提供し、そこに魔法のような感覚を生み出すこと――それが技術面での最大の難関でした。」
バッテリー駆動時間の最適化
『モンスターウォーク』は、実質的に一日中背景で動作し続けるゲームであるため、スマートフォンの過熱を防ぎつつゲーム進行を可能にするシステムを設計する必要がありました。iOSとAndroidの間でも、バックグラウンドでの動作は大きく異なります。
そのため、プレイヤーの状態を保存する際には細心の注意を払う必要がありました。また、ステップ数や健康状態のデータを背景で大量に処理しているため、アプリを閉じていても、プレイヤーが離れている間もモンスターが一緒に歩き続けているかのような錯覚をプレイヤーに与える必要があったのです。
つまり、その多くは設計上の工夫によるものだと思います。また、プロセスの終了にはかなり注意を払っており、背景スレッドが実行されていないことを確認することで、プレイヤーがアプリが開いたままバッテリーを消耗していることに気づかないようにしています。
そこで、UnityのOnApplicationFocusやOnApplicationPauseといったフックを多用し、それらのタイミングを利用して素早く状態を保存しています。そして、彼らが戻ってくるたびに、私たちは前回のセーブデータを確認してゲームを再開し、ステップ数を確認して、「ほら、君は小さなモンスターの友達と一緒に、これだけの距離を歩いたんだね」と言うのです。お帰りなさい。
