[CEDEC 2016]サウンドプログラマーがスマホゲームのサウンド実装に取り組んだ4年間と,失敗から学んだ教訓
サイバーコネクトツーのサウンドプログラマー渡邉愉香氏は,自身の4年間にわたるスマートフォンゲームでのサウンド開発経験を元に,「スマートフォンゲームのためのサウンド設計 〜コンシューマゲームとはどこが違うのか?〜」という講演を2016年8月26日に行った。
渡邉氏はコンシューマゲーム機で13年,スマートフォン向けで4年のサウンド開発を行ってきた経歴を持つ。サウンドプログラムに限らず,データ制作からサウンドディレクションまで幅広く担当しているとのことだ。
スマートフォンサウンドの実装をコンシューマゲームの常識で開発したら
渡邉氏がこれまでに関わったスマートフォンゲームは,Unityを使用した5タイトルだ。その全てで,サウンド再生システムは独自のサウンドマネージャクラスを作り,サウンドリソースの読み込みと管理は「波形バンク」(音素材を一定単位でまとめたもの)の仕組みで行われている。ゲームのステージデータ(Scene)側にはサウンドデータを持たせず,独立してサウンドデータをロードしている。
なお,一昨年のCEDEC 2014でも渡邉氏は,スマートフォンサウンドのテーマで登壇し,「コスパ最強!スマートフォンUnityサウンド強化術」というタイトルで講演を行っている。
今回の講演で渡邉氏は,コンシューマゲーム開発歴の長いベテランほど陥りがちな勘違いとして,「スマートフォンゲームはコンシューマゲームの下位互換だ」という思い込みについて紹介した。
これまでコンシューマゲームに関わっていた開発者からすると,「スマートフォンゲームは,なんとなくコンシューマゲームより下だ」という,無意識の思い込みが存在していたという。コンシューマゲームのサウンド開発においては,ロードとその待ち時間はワンセットで,ゲームの完成までキッチリ作業し,ゲームは音を出してプレイする環境で遊ばれることが一般的だ。渡邉氏もスマートフォンゲームの制作に関わり始めた当初は,コンシューマゲームと同じように作っていけばうまくいくだろうと考えていたそうだ。しかし,実際は全てが異なっていたという。
スマートフォン初チャレンジはうまく行ったものの……
サイバーコネクトツーで渡邉氏が最初に関わったスマートフォンゲームが,「シャドウエスケイパー」だ。小規模のステージクリア型タイトルで,いわゆるラン系に相当するゲームである。当初は売り切り型のアプリとしても計画していたそうで,規模が小さく運営要素が少ないシンプルなアプリだった。
そのときのサウンド設計は,Asset Bundle機能(ゲームリソースを起動後に追加ダウンロードさせる仕組み)を使わず,元からアプリ本体に全てのデータを含めた形になっていた。また,ロードはアプリの起動時とログイン時にすべて行う,思い切った仕様だったという。
このタイトルに限っては,このやり方が意外とうまくいったそうだ。アプリの規模が非常に小さかったため,いろいろなリソースが許容範囲に収まっており,大きな問題にはならなかったという。渡邉氏はおそらく運が良かっただけだろうと分析していたが,この時には開発チームからサウンドの容量や起動時のロード時間について,指摘を受けていたと話した。
そこで,最初に取り組んだスマートフォンゲームからは「アプリサイズをとにかく抑えよう」という基本的な教訓を得たそうだ。起動直後に必要なリソース以外はなるべく外部に切り出しておき,後からダウンロードする設計にしておくことがオススメだという。最初のダウンロード時間が長いと,プレイヤーが途中で諦めてしまうことがよくあるからだ。
そして運営が進んでいくと,アプリ本体に持たなくてはならないデータが徐々に増加していく。そのため,Asset Bundleで外部に出すことが可能なデータは,なるべくそうしておくことが大切だと話す。
続いて渡邉氏が取り組んだスマートフォンゲームは,中規模のカードバトル型ゲームである「ギルティドラゴン 罪竜と八つの呪い」だ。本作は3年半もの間,大量のイベントを追加しながら運営されてきた。前回の経験を活かし,サウンドデータは起動時に必要なものを除いて,全てAsset Bundle化されている。
この設計でリリースしたところ,のちに「たまにホーム画面のBGMが鳴らない」という状況が起こってしまったという。ログイン時のサウンドデータのロードが長くなり,そのロード完了を待たずにホーム画面に遷移してしまったからだ。通信状況やタイミングによって,ホーム画面に遷移した時にBGMの準備が終わっていない可能性があったのだ。
開発チームは,このロード時間について何回か指摘していたのだが,渡邉氏のそれまでの感覚から,「必要なデータを読み込んでいるだけなので,どうしようもない」と考えていたという。しかし,運営が進んでデータ容量が増えた結果,ロード待ちがより長くなり,スマートフォンゲームでプレイヤーを待たせる時間の限界を突破してしまったのだという。
ちなみに,サウンドデータはメモリに全常駐させていて,ログイン時に10MB近いデータを一気にロードする仕組みになっていたそうだ。講演後に「ストリーミング再生は使用しなかったのか?」という質問があったが,Unityにおいてはストリーミング再生をする場合と,メモリにロードして再生する場合で,ロードの「時間」にあまり差がなかったため,ストリーミングを採用しなかったのだという。
スマートフォンゲームにおいて,「ロード時間の短縮は至上命題」だ。アプリのダウンロード時間のほかに,起動時のロードが長いこともプレイヤーの離脱率に直結する。そのため,ある程度の音質を犠牲にすることは致し方がないと渡邉氏は話す。こだわった結果,プレイしてもらえなくなってしまっては意味がないからだ。
コンシューマとの勝手の違いに気づき始める中期
このころから,渡邉氏は「コンシューマゲームの開発と勝手がちょっと違う」ことに気がつき始めたという。次に始まったカードバトルゲーム「死神メサイア」は,サウンドの設計やデータサイズは「ギルティドラゴン」とほぼ同じような規模になっていたが,(ロード時間を意識したことで)ロード待ちで飛ばされることはなくなったそうだ。
しかし,別の問題が浮上してしまう。アプリ本体の更新なくしては,イベント用の追加BGMが利用できない設計になってしまったのだ。これは,Asset Bundleに含まれるデータ情報の更新を,アプリ側に依存した形で持っていたことが原因で,結果として追加データの情報を読み込むためには,アプリ本体の更新が必要になっていたからだ。
UnityのAsset Bundle機能は,単に「アプリと切り離して持てる外部参照用のデータ」であると同時に,「運営のための追加ゲームデータ」としても捉えることができる。短いスパンでイベントを繰り返すことも多いスマートフォンゲームでは,後者のように追加ゲームデータの更新のみでイベントを進行できることが望ましい。サウンドのリソースも,このやり方に追従できるような設計にする必要がある。
続いての4タイトルめは,中規模なステージクリア型の「フルボッコヒーローズX」だ。面クリア型のインベーダータイプのゲームであり,配信されるイベントの量も多い。
本作の場合は,ステージごとに読み込むBGMやSEデータをAsset Bundleファイル化しその都度ロードする,ステージ読み替え型に設計を変えたそうだ。これによって,初期ロードに必要なデータ量が,前作よりも3分の1程度に抑えることができたという。イベント追加があったときも,BGMのデータだけ差し込めば利用できるように仕様を調整したそうだ。
こうして問題が収集したかのように思えたのだが,残念ながら,イベントに追加実装したエフェクトのSEが鳴らない,または違う音が鳴ってしまうという別の不具合が発生したのだという。
原因は,SEの再生処理をエフェクト表示の中のスクリプトで記述していたことだ。正しいSE再生処理が記述してあれば問題ないのだが,バージョンアップの際にSE再生を忘れてしまうことや,間違ったSEを指定してしまうことがあったそうだ。
長い運営の中では,イベントを作る人が交代していくこともある。そのため,スクリプトベースでサウンド再生を行う場合は,そうしたミスが発生しがちだ。もちろん,スクリプト制御にも作用地点を把握しやすいメリットはあるのだが,保守性が重要なスマートフォンゲームでは,こうした不具合の原因になってしまうことがあり,可能ならば避けなくてはならないという。
紆余曲折の末にたどりついた最適解
この問題に対して渡邉氏は,Unityの場合,オブジェクトベースでSEの制御を行うことが適切だと考えたそうだ。スクリプトベースで音の制御を作っていくと,ソース内で検索もしやすく,場所が把握しやすいというメリットがある。しかし,スマートフォンゲームはリリース後もどんどんソースが変化していき,イベントを作る人も変わっていくため,スクリプト制御では作業漏れの発生が起きる可能性が高い。
そこで,SEはエフェクトやアニメーションにバインドしておき,必ず適切なタイミングでSEが再生される仕組みを導入したという。Unity Editor上でSEを再生するスクリプトを含めたPrefabを作り,そこから再生をトリガーするように変更をしたそうだ。
これを取り入れたスマートフォンゲームが「.hack// New World」だ。サウンド制御をオブジェクトベースに移行し,これまでの失敗を全てクリアした設計になっている。
Asset Bundle機能を活用した「アプリ本体の容量削減」「ロード単位の細分化」「追加データ単体での更新」「オブジェクトにSEを直接ひも付けた再生の仕組み」。これら全てを盛り込み,スマートフォンゲームに適したサウンドの設計にたどり着くことができたのだそうだ。
スマートフォンゲームは,継続的に長くプレイヤーを楽しませ続けることが命題であり,コンシューマゲームの開発よりも遥かにストイックだ。とくに厳しいこだわりがロード時間である。コンシューマゲームの場合は,ゲームの中心となる遊びに猛烈にこだわって開発されるが,それ以外のロードやUIのこだわりのランクは少し下に見られがちだ。逆にスマートフォンゲームの場合は,起動してから終了するまでの,すべての画面遷移に気を配っていく必要があるのである。
そして,スマートフォンゲームは,リリース後からサービス終了まで,改良し続けなくてはならない性質を持っている。プレイヤーの反応を確認しながらアップデートを繰り返し,例えるなら短距離ダッシュを繰り返すようなスタイルで開発を継続しなくてはならない。
渡邉氏は最後に,サウンド開発が自分の手を離れてもうまく運営が回るように,長期運営を考慮した実装にするべきだと話した。また,決してサウンドを軽視するわけではないが,スマートフォンゲームの性質上,クオリティを譲らなければならない時もある。スマートフォンゲームの開発においては,サウンド担当者も視野を広く,運営まで含めた全体を見渡して実装しようと呼びかけ,セッションを締めた。