UnityのSearchでSpriteAtlasの参照を探す
ゲームエンジニアのT.M.です。
昨年はこのような記事を書かせていただきました。
今年、異動となり、今は『あんさんぶるスターズ!!Basic』チームで運用等を担当しています。
新卒以来、ゲーム開発一筋で、今まではアーケード、コンシューマ機での開発を、最近はUnityでスマホ向けの開発を行ってきました。
現在はサーバサイドの修行中です!
サーバサイドはあまりにも初心者で記事にすることが無いため、今回の記事もUnityに関する内容となります。
よろしくお願いいたします。
Unityでファイルの参照を探す
Unityは.metaファイルでプロジェクト内の各ファイルを管理します。
.metaファイル内に記述されたguidによってアセットの唯一性が担保されます。
.metaファイルの中身
fileFormatVersion: -
guid: {guid}
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:
prefab等がアセットへの参照を持つ場合、このguidを使って参照を表現します。
なので、あるアセットがプロジェクト内で使われているかどうかは、guidで検索すると判ります。
sh
cd {Unityプロジェクトのルート}
grep -lr {guid} Assets/
このような調査を行うことで、「使われているアセットを、そうとは知らずウッカリ消してしまった」という事故を防ぐことが可能かと思います。※1
SceneにSpriteAtlasへの参照は存在しない
UnityにはSpriteAtlasという仕組みがあります。複数の不定なサイズの画像を一定のサイズの画像にまとめることで、複数画像表示時に負荷が軽減されます。
SceneでSpriteAtlasに含まれる画像を利用すると、Sceneを読み込んだ際にSpriteAtlasも読み込まれます。
ところが、SpriteAtlasの.metaに記述されたguidで検索してもSceneはヒットしません。Scene(内のGameObjectに貼り付けられたComponent)が利用しているのは、SpriteAtlasを構成する個々の画像であって、SpriteAtlas自身ではないからです。
もちろん、個々の画像で検索すればヒットしますが、SpriteAtlasを構成する画像はかなりの数になることが少なくないかと思いますので、いちいちguidを拾って調べるのは面倒です。
そこでSearchの出番です
この問題を、Unity2021から追加されたSearchで解決します。2020でもPackageManagerから機能を追加することが可能です。使い方は各種ドキュメントをご参照ください。
https://docs.unity3d.com/ja/2021.3/Manual/search-overview.html
(初期の状態ではSceneは検索対象ではないので、Sceneを含むindexをビルドして、検索の対象に加える必要があります)
Searchには式で検索する機能があります。
https://docs.unity3d.com/ja/2021.3/Manual/search-expressions.html
参照は ref:で探すことが出来ます。
ただし、ref:{Sceneで使われるSpriteAtlas}.spriteatlasで検索しても依然Sceneはヒットしません。
そこで、「SpriteAtlasを構成する画像」の入ったフォルダを直接指定してサーチします。
ref:{Assets/{※SpriteAtlas用画像の入ったフォルダのパス}} -png
フォルダを指定すると、そこに含まれるファイルすべてについて調べてくれるようです。上記では画像はpngである前提で、結果からそれらを除外しています。※2
この方法で確認するには、予めSpriteAtlasを構成する画像を同一フォルダ内に集めておく必要があります。とはいえ、実際のプロジェクトでは何らかのまとまりで管理されていることが多いかと思いますので、その管理毎で検索すれば気軽にチェックできるかなと思います。
※1.{文字列}は適宜置き換えをお願いします
※2.ref:{Assets/AtlasImages/Atlas1/} 等…ref:{}の {}は必要ですのでご注意ください
Happy Elements株式会社 カカリアスタジオでは
いっしょに「熱狂的に愛されるコンテンツ」をつくっていただけるメンバーを大募集中です!
もし弊社にご興味持っていただけましたら、是非一度下記採用サイトをご覧ください!