ぼっちブログ

個人ゲーム開発者やっています。主に購入したUniyアセットの使用感を書いていきます。

【Unity】Sprite Atlasでパッキングした画像を使うと元の画像はどうなるか

ちょっと気になるツイートを見かけたので、Sprite Atlasを使うと元の画像はどうなるかAndroidビルドで調べてみようと思います。

バージョン情報

  • Unity 2018.2.11f1

とりあえず普通にビルド

まずはSprite Atlasを使わずに、シーンにスプライトを並べてビルドしてみます。

シーンに並べたスプライト

わかりやすいように、スプライトは無圧縮(RGBA32bit)に設定しています。

スプライトを無圧縮(RGBA32bit)に設定

ビルドしたところ、アプリサイズは約27MBに。

アプリサイズは約27MB

ビルドログを見ると、当たり前ですが無圧縮のサイズで画像が含まれています。

画像無圧縮のサイズでビルドに含まれる

Sprite Atlasを使う

Sprite Atlasが無効になっている場合があるので、Edit→Project Settings→EditorでSprite Packer/Modeを Alway Enabledに変更。

Sprite Packer/ModeをAlway Enabledに変更

Project右クリックでCreate/Sprite Atlasを選択してファイルを作り、Objects for Packingでアトラス化したいスプライトのフォルダを指定して、Pack Previewを押します。

今回は1枚のアトラスで収まりきらず、2枚のアトラスが生成されました。

生成されたスプライトアトラス1枚目

生成されたスプライトアトラス2枚目

この状態でアプリをビルド。

アプリサイズは微増。

Sprite Atlasを使うとアプリサイズが微増

ビルドログには、テクスチャアトラスのファイルが2枚含まれるようになっていて、元の画像はサイズが小さくなっています。

元の画像はピクセルデータが取り除かれて、必要最低限のサイズになってるっぽい。

元画像のピクセルデータ分のサイズが減っている

圧縮フォーマットでビルドしてみる

アトラス化する過程で、パックされたスプライトは2のべき乗サイズになるので、ついでなので、Sprite Atlasを圧縮フォーマットにして、ビルドを試してみたいと思います。

圧縮フォーマットについては、下記とか参考。

tsubakit1.hateblo.jp

d.hatena.ne.jp

とりあえずはETCやETC2を使っておけばいいかな。

古い端末だと対応してないけど、Crunched圧縮も使えば、ものすごくサイズ削れるし。(古い端末カバーするならiOSだとPVRTCかもだけど)

Crunched ETC2でアトラスを生成。

Crunched ETC2でアトラスを生成1

Crunched ETC2でアトラスを生成2

そしてビルド。

Crunched ETC2でアプリビルド 結果

Crunched ETC2でアプリビルド ログ

思ったより、アプリサイズは小さくならないな。

アプリ(.apk)自体に圧縮がかかってるだろうから、それのせいかも。

スプライトのサイズは1/32程度になってるので、ストアのアプリサイズの制限に引っかかったときとかには使ってみよう。