こんにちわ、Unityエンジニアのオオバです。

Unityバージョン4.6辺りからテクスチャを1枚にパックする(1枚のテクスチャにする)機能があります。

そもそもなぜ アトラスにするのかというと描画負荷軽減のためです。
アトラスにしない場合 テクスチャ1枚につき1マテリアル を作ることになります。

するとAオブジェクト、Bオブジェクトを描画する際に2回の描画命令が必要です。

  1. Aを描画するためにマテリアルを切り替える
  2. Bを描画するためにマテリアルを切り替える

というイメージです。

パックしていると、A、B両方を1回の描画命令で表示することができ、描画負荷を下げることが出来ます。

ここまでをまとめると、同じマテリアルを使いまわすことで、描画命令回数を削減しパフォーマンスを上げることが出来るということです。

Unity 同じタグ名なのにSpriteがアトラス化されない時の対処法_0

テクスチャの設定をこのようにすると、とりあえずはアトラスは生成されます。

パックされない落とし穴

以下の2種類のテクスチャを先の設定にしてもパックされません。

Unity 同じタグ名なのにSpriteがアトラス化されない時の対処法_1
Unity 同じタグ名なのにSpriteがアトラス化されない時の対処法_1
A.透明部分を含む画像B.不透明画像

なぜなら Texture Type Sprite(2D and UI) の場合、画像のフォーマットを透明を含む画像かどうかで自動的に判別して設定してしまうからです。

Unity 同じタグ名なのにSpriteがアトラス化されない時の対処法_2

例えばFormatを Truecolor に設定した場合以下のような画像フォーマットに自動で変換されます。

A.透明部分を含む画像B.不透明画像
RGBA32bitRGB24bit

どうやって変換後のフォーマットを確認するのかというと、テクスチャを選択したインスペクタのプレビュー下部に記述されています。(ピンク枠内参照)

Unity 同じタグ名なのにSpriteがアトラス化されない時の対処法_3

1枚のテクスチャにするわけなので1種類のフォーマットを決める必要があります。そこで複数のフォーマット設定が混在しているとパックすることは出来ません。

解決方法 : Texture TypeをAdvancedに変更

Unity 同じタグ名なのにSpriteがアトラス化されない時の対処法_4

Advanced に変更するとテクスチャに対して細かい設定することが可能になります。

パックするために必要な設定項目は3つあります。

  1. SpriteModeとPacking Tag
  2. Format
  3. Non Power of 2

1.SpriteModeとPacking Tag

これをすることでパック対象のテクスチャに設定されます。

設定項目設定内容
SpriteModeSignle
Packing Tag任意の文字列

2.Format

何度も登場している画像フォーマットです。用途によって設定するわけですが、方針としてパックしたい全ての画像のフォーマットを揃えることです。

また、透明画像と不透明画像が混合した状態でパックする場合は、透明を設定したフォーマットにする必要があります。
今回の場合だと両テクスチャ RGBA 32bit に設定することで同じフォーマットになります。

3.Non Power of 2

聞きなれない人もいるかもしれませんが、テクスチャを2のべき乗にサイズに強制的にリサイズする機能です。2のべき乗にしないと使用できない画像フォーマットに設定したいときなどに使用しますが、パックする場合は使用しません。 None を設定します。

逆に None 以外を設定して Power of 2を有効化してしまうと以下のようなワーニングが出力し、パックすることは出来ません。

Sprites can not be generated from textures with NPOT scaling.  

※NPOTとは Non Power of 2(Two)の略称です。
Non Power of 2の設定は忘れやすいです。

無事にパックされました

Unity 同じタグ名なのにSpriteがアトラス化されない時の対処法_5

パックされた画像は、 Window > Sprite Packer から確認できます。

テクスチャ設定を変更してもパックの更新されていない場合は、左上の Pack をクリックすると最新化されます。

Unity 同じタグ名なのにSpriteがアトラス化されない時の対処法_6

余談1

Texture TypeをAdvancedにすると選べるFormatが増えます。

Unity 同じタグ名なのにSpriteがアトラス化されない時の対処法_7

このときにAutomatic~~ を選んでしまうと再度パックされなくなります。
Advanced以外のフォーマット設定では内部的に Automatic~~ が実行されているためです。

余談2

アトラス化されたテクスチャはUnityの内部で保持しているようで、ダウンロードすることは出来ません。

オススメ記事
2021秋 Asset Refreshセール
100以上のアセットがなんと50%OFF!!オオバもいくつか買いました!
期間 : 10月2日午後3時59分まで
検証環境