Unityが無料で発行しているeBook "Optimize Your Mobile Game Performance"を読み解いていこう!というこの企画もいよいよ後半戦!今回はAudio編です。
Audio
通常、オーディオがパフォーマンスのボトルネックになることは無いのですが、それでもメモリを節約する最適化を行うことは出来ます。
可能ならば、サウンド・クリップをモノラル化する
もし、あなたが3D空間オーディオを利用している場合、サウンド・クリップをモノラル(1ch)とするか、Force To Mono設定を有効にするかしてください。
実行時に位置情報的に使われているマルチ・チャンネルはモノ音源に押しつぶされ、これはCPUのコストを増やし、メモリも無駄使いしてしまいます。
出来る限り、ソース・アセットとして非圧縮のオリジナルwavファイルをインポートする
もし、MP3やVorbisのような圧縮フォーマットを使用している場合、Unityはビルド時に音源を解凍した後で再圧縮することになります。
この結果、二度もデータを損失する工程を経てもたらされるのが、最終的なクオリティの劣化です。
クリップを圧縮して、圧縮ビットレートを下げる
圧縮によって、クリップのサイズとメモリの使用率を減らそう。
・大体のサウンドにはVerbisを使う。(非ループ音源にはMP3)
・短くて、頻繁に使用される音源にはADPCMを使う。(足音や銃声など)
ADPCMは非圧縮のPCMに比べると圧縮されていますが、再生時に素早くデコードされます。
多くの場合、モバイル・デバイスでのサウンドエフェクトは22,050Hzであるべきです。(※おそらく周波数帯域のこと?)
低設定を使っても、最終的なクオリティにそれほど影響は与えませんが、しかし自分の耳で判断してください。
適切なロード・タイプを選択しよう
クリップのサイズごとに設定は変わります。
・小さなクリップ(200KB以下)はDecompress on Loadにする。これは16bitのPCMに解凍する際にCPUとメモリに負荷を発生させるので、短い音にだけ望まれる。
・中くらいのクリップ(200KB以上)にはCompress in Memory
・大きなクリップ(BGM)はStreamingに設定する。さもなくば、一度にそのオーディオ・クリップ全体がメモリに読み込まれることになります。
ミュートされたAudio Sourceはメモリからアンロードする
ミュート・ボタンを実装した時に、単純にボリュームをゼロにする、ということはしないでください。
Audio SourceコンポーネントをDestroyすることで、メモリからアンロードすることが出来ます。これにより、プレイヤーが頻繁にオンとオフを切り替える必要が無くなります。
というわけで、Audio編でした。オーディオ・アセットのインポート設定が良く分かっていなかったので、細かい部分ですが助かりました。
次回はAnimation編です。