💬

【C#】Unityの不要アセット削除ツールを作った話

2024/01/23に公開

本記事はプロモーションを含みます(笑)
BoothにUnityの不要なアセットを削除できるツール「Assets Deleter」を出品しています。
ツールがどんな仕組みでできているかなど、調査した内容やらロジックをちょっと書いていこうと思います。

ツールの作成経緯

友人のワールド作成の手伝いをしているなかで、アセットが肥大化して、もう大変・・・。
適当にフォルダを消したら、オブジェクトが紫になって、どのアセットを使用しているかわからん!

Assets Deleterとは

Unityプロジェクトで使用していない不要なアセットを判別・削除できるツールです。

アプリ概要

  • Windows formアプリ(C#)
  • .NETバージョン(確認中)

ロジック

  1. Unityプロジェクトフォルダ>Assetsフォルダ配下のリスト化
  2. .Unityファイルから使用中のアセットの取得
  3. 「2.」を基に削除対象をスキャン
  4. 削除実行

削除判定

Unityで使用中/未使用は.unityに記載されています。(例外あり)
もっと詳しく書くと、フォルダ/ファイル単位にGUIDという固有のIDが振られていて、使用しているアセットのGUIDが.unityファイルに刻まれています。
フォルダ/ファイルに割り当てられたGUIDは.metaファイルで確認することができます。

こんな感じで一対になってます。

SAKURAエディタなどのテキストエディタで、.metaファイルを開くと「guid」があります。

ちなみに、.unityファイルの中はguidだらけです(笑
あと特筆すべきは、全部が.unityで管理されているわけではないということです。

例外

「lilToon」シェーダーがいい例かもしれません、.unityは3Dオブジェクトに割り当ててるマテリアルやシェーダーは.unityの管理外みたいです。
まだ未調査ですが、使用していマテリアルやら、シェーダーは各オブジェクトなどの.metaファイルなどで管理されているっぽいです。

あと、なんでか「terrain」も管理対象外みたいです。

デバッグ中にliltoonが消えて紫になっちゃりしたので、発覚しました。
なので、ツールには、削除対象/対象外を任意に変更できる機能を仕込みました。

あとがき

例外の部分も自動で判定ができそうですが、結構骨が折れそうで、実装は見送っています。
スキャンに時間かかりそうなのと、もうちょい深くUnityの仕様を理解する必要がありそうです。

久しぶりにC#使ったので、ファーストリリースはちょっとグダちゃいましたが、今Verは比較的安定しているかも・・・。
是非使用感をお伺いしたいところではあります!

関連

参考記事

Discussion