ReLayer Floating UI負荷テスト:忙しい戦闘画面での性能
開発中のReLayer Floating UIと、Androidエミュレーターでの負荷テストから得たことを紹介します。
画面が忙しくなってもFloating UIは戦いについていけるでしょうか。ReLayerのサンプルでカメラとキャラクターを素早く動かし、テーマを切り替え、大量の数字を表示しました。Androidエミュレーターでの30秒テストの結果を紹介します。

画面が忙しくなったら?
開発中のサンプルで、テーマの連続切り替え、カメラの変化、キャラクターの移動、大量の数字、そしてそれらを同時に重ねる30秒のテストを行いました。数字が多い2つの区間では、毎秒1,000件の表示イベントを目標にしました。ゲーム内の実ダメージではなく表示用のテスト値です。
数字は同時に128個のスロットを共有します。満杯になると新しいイベントが古い表示を置き換えるため、毎秒1,000件は1,000個の同時表示を意味しません。計測前にテーマのキャッシュを準備しました。
結果と、その条件
1080pのAndroidエミュレーターでUnity 2022.3とネイティブx86_64を使った30秒間、Unityカメラは平均66.85 FPS、WebViewのアニメーションコールバックは平均毎秒88.37回でした。表示イベント12,012件を送出し、生成処理のスキップは0件でした。両方の平均は60を超えましたが、個々の計測区間では下回る場面もありました。
別のUnity 6 ARM64エミュレーター実行ではUnityが平均52.80 FPS、WebViewが平均87.92 FPSでした。エンジンと実行アーキテクチャの両方が異なるため、単一の原因を比較した結果ではありません。録画負荷を含むエミュレーターでの測定であり、実機の結果やフレームレートを保証するものではありません。
ゲーム世界に溶け込むインターフェース
サンプルには名前、体力バー、ダメージと回復の数字、バフ、コンボが登場します。ファンタジーからシャープな戦術画面まで8種類のスタイルを出発点に、Reactソースをゲームの雰囲気に合わせて調整できます。
Unityはカメラとキャラクターの動きに合わせてUIの位置を追跡します。Reactの内容は画像としてキャプチャされ、内容の変更時に非同期で更新されます。位置追跡と内容更新は別なので、新しい体力値が動きより遅れて届く場合があります。

次の一撃のために
同じ負荷を保ったテストから、準備済みの画面を再利用し、繰り返しの処理を減らせる箇所が見えてきました。戦いを追うプレイヤーには一瞬の停止も大切だからこそ、平均の先にも目を向けています。
この記事で紹介した拡張Floating UIと負荷テストの改善は開発中で、ストアパッケージではまだ公開されていません。リリースに向け、さまざまな環境で確認を続けます。
