この記事でのバージョン
Unity 5.3.4f1 Personal
はじめに
Unityには複数のスプライトをまとめて使えるSprite Packerという機能があります。
これを使うことでSetPass calls(旧DrawCall)を減らし、
処理を軽くすることが出来ます。
このSprite Packerを使うにはEdit-Project Settings - Editorの
Sprite Packer - ModeをDisabled以外に設定し、
対象のTextureTypeをSpriteにし、PackingTagを設定する必要があります。
そこまで面倒ではないですが、
変更や追加があるたびに手を加えるのはミスが起きそう……ということで自動化です!
SpritePostprocessor
スプライトの自動設定にはAssetPostprocessorのOnPreprocessTextureを使います。
詳しくは以下の記事をどうぞ!
そのAssetPostprocessorを継承して、
特定ディレクトリに入ったテクスチャだけTextureTypeをSpriteに変更し、
ついでにPackingTagも設定する、SpritePostprocessorを作ったのでこれもご紹介!
SpritePostprocessorをEditorディレクトリに入れると、以下のように
ドラック&ドロップした時、
またはフォルダ移動した時に設定が自動で行われるようになります。
この状態で再生するとパッキングが自動で行われます。
なお、ディレクトリ名をタグにつけているので、
同じディレクトリ内のものがパッキングされるようになっています。
また、コメントアウトしている所のようにTextureImporterは他の設定も可能なので、
用途に合わせて諸々の設定を自動化しておくとかなり楽になるかと思います。
おわりに
今回紹介した方法を使うとSprite Packerの設定を意識せずに済むようになります。
まぁそもそもSprite PackerにはResources内のファイルはパックできないという
致命的な欠点があるので、他のツールでパックする場合も多い気がしますが……。
これってなんのための制限なんですかね?
ちなみに自分の場合は、他のツールを使うのが面倒なので、
- Spriteを管理するスクリプトAを作成
- Resources内にスクリプトAをAddしたプレハブAを配置
- Resources外で自動パック(今回紹介したやつ)
- 自動パックすると同時にプレハブAに自動で追加
- 再生時にプレハブAのインスタンス作成し、そこからパックしているSpriteを取得する
みたいな感じで使ってます。なんと回りくどい使い方……。
これについてもそのうち記事にするかも(:3っ)∋〜