読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

Sprite Packerの設定を自動で行う【Unity】【エディタ拡張】

Unity エディタ拡張

このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 5.3.4f1 Personal


はじめに

Unityには複数のスプライトをまとめて使えるSprite Packerという機能があります。



これを使うことでSetPass calls(旧DrawCall)を減らし

処理を軽くすることが出来ます。


このSprite Packerを使うにはEdit-Project Settings - Editor

Sprite Packer - ModeをDisabled以外に設定し、


f:id:kan_kikuchi:20160607132617j:plain
f:id:kan_kikuchi:20160607132622j:plain


対象のTextureTypeをSpriteにし、PackingTagを設定する必要があります。


f:id:kan_kikuchi:20160606134619j:plain



そこまで面倒ではないですが、

変更や追加があるたびに手を加えるのはミスが起きそう……ということで自動化です!


SpritePostprocessor

スプライトの自動設定にはAssetPostprocessorのOnPreprocessTextureを使います。

詳しくは以下の記事をどうぞ!



そのAssetPostprocessorを継承して、

特定ディレクトリに入ったテクスチャだけTextureTypeをSpriteに変更し、

ついでにPackingTagも設定する、SpritePostprocessorを作ったのでこれもご紹介!



SpritePostprocessorをEditorディレクトリに入れると、以下のように

ドラック&ドロップした時


f:id:kan_kikuchi:20160607134002g:plain


またはフォルダ移動した時に設定が自動で行われるようになります。


f:id:kan_kikuchi:20160607134039g:plain


この状態で再生するとパッキングが自動で行われます。


f:id:kan_kikuchi:20160607134303j:plain


なお、ディレクトリ名をタグにつけているので、

同じディレクトリ内のものがパッキングされるようになっています。


また、コメントアウトしている所のようにTextureImporterは他の設定も可能なので、

用途に合わせて諸々の設定を自動化しておくとかなり楽になるかと思います。





おわりに

今回紹介した方法を使うとSprite Packerの設定を意識せずに済むようになります。

まぁそもそもSprite PackerにはResources内のファイルはパックできないという

致命的な欠点があるので、他のツールでパックする場合も多い気がしますが……。

これってなんのための制限なんですかね?


ちなみに自分の場合は、他のツールを使うのが面倒なので、

  • Spriteを管理するスクリプトAを作成
  • Resources内にスクリプトAをAddしたプレハブAを配置
  • Resources外で自動パック(今回紹介したやつ)
  • 自動パックすると同時にプレハブAに自動で追加
  • 再生時にプレハブAのインスタンス作成し、そこからパックしているSpriteを取得する

みたいな感じで使ってます。なんと回りくどい使い方……。

これについてもそのうち記事にするかも(:3っ)∋〜