ただの適当な開発記

会社勤めしつつUnityでアプリ作ってる人の雑記

【Unity】SpritePackerとSpriteAtlasを自動変換するスクリプト

この記事はUnityゆるふわサマーアドベントカレンダー 2018の3日目の記事になります

2日目の記事は@NitudonさんのC#MessageBoxのようなダイアログをコルーチンみたいな感じで作ってみる - うどんゲームメモでした!

はじめに

最近UnityのSpritePackerとSpriteAtlasを触ることがあったので、備忘録としてゆるふわに書かせてもらいます

Spriteなんちゃら

SpritePackerもSpriteAtlasも名前が似てて最初はどっちがなんだかわからなかったのですが、今となっては違いがはっきりわかります。
どちらも、複数ある画像を1つの大きな画像としてUnityに処理してもらいたいときに使います。

※この記事では画像をまとめることをパッキングと表現します

  • SpritePacker
    • 結構前からある(自分が確認できた一番古いバージョンはUnity5.0
    • パッキング対象の画像はResoucesフォルダ以下に配置できない
    • アセットとしての実態は存在しない(厳密に言えばLibraryフォルダ以下にはキャッシュファイルが存在するが、ユーザーが触ることを前提としたものはない
    • 画像のフォーマットはパッキング対象の画像に依存する(フォーマットが違う画像同士は別々にパッキングされる)
    • パッキングの方法は画像の「Packing Tag」の項目にタグ名を入れる。同じPacking Tagの画像同士が1つにパッキングされる
  • SpriteAtals
    • Unity2017から登場
    • パッキング対象の画像はResourcesフォルダ以下に配置できる
    • アセットとしての実態が存在する(.spriteatlasファイル)
    • 画像のフォーマットはspriteatlasファイルごとに設定できる
      • 通常の画像ファイルと同じようにプラットフォームごとの設定が可能
    • パッキングはspriteatlasファイルのインスペクター上で行える


とまあそれぞれの特徴はざっくりこんな感じです。
最近、どっちを使えば便利かなーというのでそれぞれを検証していたのですが、その際に困ったことがありました。
それは「両方のパッキングの設定に自動移行の機能がない」ということです。
別々の機能なんだから当たり前といえば当たり前なんですが、困ったぞということでスクリプトを書きました。

SpritePackerとSpriteAtlasを自動変換するスクリプト

実際のスクリプトはこちらです。
gistドーン

gist.github.com


#ifでくぎってないのであれですが、Unity2017用です。
リフレクションでいろいろやってますが、Unity2018からはSpriteAtlasのEditor側のAPIが公開されてるのでそちらを使ってあげれば済みます。
Unity - Scripting API: SpriteAtlasExtensions
SpriteAtlasファイルも簡単に生成できるようになってるのかな?このScriptだとSpriteAtlasファイルの生成をyamlファイルの文字列から生成するという回りくどいことをやっています。

機能

画面上部メニューの"Tools" -> "SpriterPacker <-> SpriteAtlas 変換"を選択するとこんなwindowが出てきます
f:id:cocokyoro:20180802224602p:plain

ためしにこんな状態の画像ファイルを用意します
Packing Tagに"sample"と入っています。
この状態で先程のwindowの「SpritePacker -> SpriteAtals 変換」の出力を押すと..
f:id:cocokyoro:20180802224638p:plain

こんな感じでsampleというSpriteAtlasが出力されます。
タグ名をそのままSpriteAtlasの名前にしてます。
f:id:cocokyoro:20180802224710p:plain

では逆にSpriteAtlasの名前をhogehogeに変更してみます
f:id:cocokyoro:20180802224746p:plain

この状態でwindowの「SpriteAtals -> SpritePacker 変換」の出力を押すと...
f:id:cocokyoro:20180802224823p:plain
hogehoge.spriteatlasに使われていた画像のPackingTagにhogehogeが反映されています。

これがやりたかった!

以上です!

4日目の記事は@tomori_hikageさんの「【Unity】Live2DモデルをAnimationウィンドウで編集したいとき」です!