この記事はクラスター Advent Calendar 2020の17日目です。
前回はYOSHIOKA_Ko57さんによる「UnityでプラットフォームごとにUIの判定エリアを変える」でした。
プラットフォームごとのUI作りはむずい!
##はじめに
こんにちは、ふたつきです。
クラスター株式会社でUnityエンジニアとして、入室後に使う機能やUIの実装を主に行なっています。
最近は公式が出しているイベントやワールドの負荷検証などもやっていて、そこで「なんかすごくメモリ食ってない?」ってなった時にとりあえずやっていることをまとめてみました。
##とりあえずメモリを見る
今回はハロクラディレクターからお借りしたハロクラ会場のメモリ使用量を見ていきます。
まず最初に開発者モードでメモリ使用量を見てみます。
※開発者モードは、歯車アイコンの設定メニューからオンにすることができます。
指標として先にCluster Creator Kit Sampleに入っているMinimalSampleを見てみます。(何もないとこれくらいという指標になります)
差を見ると会場で300MBくらいメモリ使ってそうですね。
メモリ使用量が1000MB以下なら大体の端末で動くはずなので無理をする必要はないですが、今回はもっと減らせれるか見ていきます。
#メモリの内訳を見てみる
自分は普段Unityから配布されているMemoryProfilerを使っているのでMemoryProfilerで見ていきます。
###MemoryProfilerを入れる
そもそもMemoryProfilerが入ってないよ!ということでMemoryProfilerをインストールする手順を書いていきます。
見たいワールドのUnityプロジェクトを開きWindow->PackageManagerを開きます。
Advanced内にあるShow preview packages にチェックを入れます。(MemoryProfilerはまだpreview版なのでこれをやらないと出てこない)
memoryあたりで検索すると左の一覧に出てくるので選択して右下のInstallボタンを押します
Window->Analysis->MemoryProfilerが開ければOK!
###MemoryProfilerでキャプチャを取ってみる
作った会場をUnity上で実行し、開いているMemoryProfilerのCapturePlayerを押します(途中で出てくるダイアログはTakeSnapShotを押す)
キャプチャしたファイルが左の一覧に溜まっていくので今取った最新のものをOpen!
###MemoryProfilerでキャプチャを見る
キャプチャを開くと下のようなカラフルな画面が出てきます。これが現在Unity上で使っているメモリの内訳になります。(UnityEditorのUI画像も含まれていて実機での状況とちょっと違うので注意!)
とりあえず一番大きいTexture2Dをクリックしてみます。
##各要素でメモリ削減をする
こういう感じで各内訳を見ていってすごくでかい物を削減できないか検討してきます。
###テクスチャを減らす
先程見た内訳に42MBも使っているテクスチャがあったのでそれが削減できないか検討してみます。
ProjectWindowでファイル名を検索すると4Kのテクスチャが出てきたのでこれを強い気持ちでサイズ縮小していきます。
テクスチャはサイズを小さくするくらいしか簡単に削減できなさそうなのでクオリティとのトレードオフでやっていきましょう。
###AudioClipを減らす
AudioClipの内訳を見たときbellが6.5MBあるのが気になったのでこいつも減らせないか検討してみます。
AudioClipは何も設定しないと無圧縮のオーディオデータがメモリに載るので用途によってLoadType設定を変え、メモリに載る量を最適なものにしていきます。
Decompress On Load:無圧縮の音データ、容量が短いSEなどで使うと良さそう
Compressed In Memory:圧縮された音データ、再生時に非圧縮にするので長めのSEなどで使うと良さそう
Streaming:再生している箇所の前後のみがメモリに載る、BGMや歌などで使うと良さそう
bellは長めのSEだったのでCompressed In Memoryにしておきました。
##最終結果
以上のことをするとメモリが…
18MB減りました…思ったより減りが少ない…
2つのテクスチャを小さくして1つのAudioClipの設定を変えただけなので、改善する場所はまだまだありそうです。
こんなかんじでメモリの使用量を減らす道は地道なものになりがちですが、みんなも頑張って減らしていきましょう。
明日はcompile3の「KAKUYO」です。
NANIWKAKUNDESHOUNE,TANOSHIMIDESU