ユニティ・テクノロジーズ・ジャパンは、9月25・26日、Unityに関する国内最大のカンファレンスイベント「Unite Tokyo 2019」を開催。会場ではエンジンコアを開発している精鋭スタッフも世界各地から来日し、Unityユーザーに向けた講演やブース展示が数多く行われた。
本稿では、9月26日に実施された講演「『SINoALICE -シノアリス- 』~ それは最速のゲーム起動 ~」について、レポートをお届けしていく。
本セッションには、『SINoALICE -シノアリス- 』(以下、『シノアリス』)のエンジニアマネージャーである中原雄一氏が登壇。『シノアリス』がリリースされて2年が経過する間にゲーム起動が遅くなった原因と、その解消法を紹介。さらに、再発防止のためのシステムや業務フローについての解説が行われた。
【登壇者】
●中原雄一氏
ポケラボ『シノアリス』チームのエンジニアマネージャー。エンジニアメンバーをまとめながら、システム開発・運営・保守を担当している。
■『シノアリス』のゲーム起動フローに迫る
『シノアリス』がリリースされて2年。中原氏は、処理をするデータ量が多くなったことが原因で、ゲーム起動がすっかり遅くなってしまったと説明する。ゲーム起動の対策方法を述べる前に、中原氏はまず、本作のロード画面について対策前と対策後の比較動画を紹介した。▲中原雄一氏。
▲ロード中にはキャラクターの紹介が行われるなど、ユーザーを退屈させない工夫がされている。
ロード画面について、対策後はSNSでユーザーから「シノアリスのアップデートしたら起動時間滅茶苦茶早くなったw」「シノリスの起動はやくなったのほんと嬉しい。感謝。」といったメッセージが書き込まれるなど、反響も大きかったそうだ。実際に対策後のロード画面の動画の再生中は、会場からも「早い!」という驚きの声が上がっていた。
本作のゲーム起動フローは、ログイン処理、各種ユーザーデータのロード、各種ゲームデータ(マスタデータ)のロード、AssetBundleのチェック&ダウンロード、ResourceFileのチェック&ダウンロードの5つに分けて行われる。5つの詳細については、以下の通り。
①ログイン処理
端末で一意なIDでセッションをはり、ユーザーIDを取得する。
②各種ユーザーデータのロード
名前やレベル、スタミナの情報を取得していく。
③各種ゲームデータ(マスタデータ)のロード
マスタデータは約80種類あり、マスタ毎に用意しているAPIを実行し、端末のローカルストレージに保存する。
④AssetBundleのチェック&ダウンロード
各種アイコン、キャラクターSpine、敵Spine、バトル中エフェクト、バトル背景、各種バナーの6つをAssetBundle化しているが、CRIWARE系のバイナリファイルはしていないそうだ。メソッドはUnityWebRepuestAssetBudle.GetAssetBundleを使用。cachedAssetBundleを指定し、CRCチェックはスキップするといった扱い方をしている。
⑤ResourceFileのチェック&ダウンロード
各種動画、各種BGM、各種SE、キャラVoiceをダウンロード。『シノアリス』で特徴的なシナリオVoiceもイベント時に複数ダウンロードしている。persistentDataPathにファイルが存在するか、ハッシュ値(MD5)が一致しているかをチェック。ファイルダウンロードはSystem.Net.WebClient.DownloadFileAsyncを使用している。
ちなみに、アプリサイズはWi-Fi環境下でストアからアプリをダウンロードできるようにしておくため、150MB以内を指標としているそうだ。
■ゲーム起動が遅くなった要因と、その対策を紹介
続いて、中原氏はゲーム起動フロー時のボトルネックについて紹介する。まず挙げられたのは、各種ゲームデータ(マスタデータ)のロードについて。マスタデータが約80種と種類数が多いことや、クエスト関連マスタやシナリオマスタ、カードマスタといった一部のマスタデータのサイズが大きく、ダウンロードの時間がかかってしまうのだ。
AssetBundleのチェック&ダウンロードについては、各種アイコンはダウンロードが発生しなくてもHash値比較が約4500回行われているうえ、運営していく中で特に増加が顕著な項目となっている。
▲「AssetBundleのチェック&ダウンロード」について、リリース時と現在とを比較したグラフ。比べてみると、各種アイコンが激増しており、ボトルネックになっていることが分かる。
対策として、各種アイコンも随時ダウンロードする方式に変更。図鑑などアイコンが複数並ぶ画面は、画面表示を行いながら非同期でダウンロードしたという。これにより、AssetBundleに関して、全ての項目がゲーム起動時にチェック&ダウンロードが行われるようになった。
▲キャッシュクリアなどを行うとアイコンが徐々に表示されていくような挙動になってしまったが、その部分は許容できる範囲内だったそうだ。
また、『シノアリス』はシナリオに基づくボイスの数がリリース時の200種類から増え続けており、圧倒的に数が多いこともボトルネックとして挙げられる。その対策として、随時ダウンロード方式に変更。さらに、ファイルチェックの回数も更新があった時のみチェックとダウンロードを行うような方針に変えたと話した。
▲リリース時と比べ、シナリオVoiceの量は約4倍になっていることが分かる。
ResourceFileについては、各ファイルはResourceFileマスタにて管理し、管理マスタのバージョンがあがった時のみファイルチェックを実施。中原氏は、ResourceFile管理マスタの生成は自動化を行っていると述べた。
動画もサイズが大きいため、再生する場所で随時ダウンロードする方法に変更。過去のイベント動画などはダウンロードをなくすなどの工夫を行っているそうだ。
■ロード画面を快適化するプログレスバーの表示方法とは?
中原氏は、各種ゲームデータ(マスタデータ)の管理方法についても紹介。各マスタは「バージョン管理マスタ」で管理しており、各マスタのバージョンをチェックし、更新が必要なマスタデータを取得をしているそうだ。取得したマスタデータとそのバージョンをローカルストレージに保存するといった、処理フローについても説明した。
マスタデータの取得処理については、バージョンチェックは専用のAPIを利用。ローカルストレージに保存している各マスタのマスタ識別ID、バージョンの配列をすることで、サーバーが差分が発生しているマスタの識別IDを配列していく。差分が存在すればマスタデータの取得に繋がるとのことだ。
また、講演終盤では、ダウンロード画面時のプログレスバーについての表現テストが実施される場面もあった。ダウンロード画面表示時にプログレスバーが表示されないものや、プログレスバーが段階的に動くもの、スムーズに動くものといった様々なケースがスクリーンに映し出される。
シノアリスチームメンバーによると、一番評判だったのが、プログレスバーが単数でスムーズに動く表現方法だったそうだ。中原氏は、UX的に体感が良かったことがポイントになったと話した。
▲プログレスバーを出さないことも検討したが、待ち時間が3~5秒だと遅い体感になってしまうそうだ。
▲波模様が右から左に流れるパターンのプログレスバーが最も早い体感になるといった文献も紹介された。
前述した対策の効果として中原氏は、ユーザーの満足度が上がったこと、新規インストール時のダウンロード量が減ったことや、CDN料金が減ったこと、開発時のPDCAが早くなったことなどを挙げる。
最後に、中原氏は今後チャレンジしたいこととして、バックグランド時のダウンロードや一括ダウンロードか随時ダウンロードかの選択、動画のストリーミング再生、プログレスバー表現のさらなるUX向上を挙げ、講演を終了した。
(取材・文 ライター:島中一郎)
■『SINoALICE(シノアリス)』
©2017 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.
会社情報
- 会社名
- 株式会社ポケラボ
- 設立
- 2007年11月
- 代表者
- 代表取締役社長 前田 悠太