【Unity】アセット管理を効率化するためのガイド: AssetPostprocessorとAssetModificationProcessorの活用方法
Unityの開発過程において、アセットのインポートパイプラインをカスタマイズすることは、効率的なアセット管理に不可欠です。このカスタマイズを行うための主なツールは「AssetPostprocessor」と「AssetModificationProcessor」です。
AssetPostprocessorの概要
AssetPostprocessorは、アセットがインポートされた際に特定の処理を実行するために用いられます。これにより、アセットのインポートプロセスをフックし、必要な操作を自動化することができます。
主なメソッド
この表は、AssetPostprocessorを使用して、特定のアセットタイプのインポート処理をカスタマイズする際に役立ちます。それぞれのメソッドがどのようなタイミングで呼び出されるかを理解することで、より効果的なアセット管理が可能になります。
| メソッド名 | 説明 |
|---|---|
| OnPostprocessAllAssets | すべてのアセットに共通して行う処理を定義する |
| OnAssignMaterialModel | ソースマテリアルの設定を行う |
| OnPostprocessAssetbundleNameChanged | アセットが他のアセットバンドルに指定された時に呼び出される |
| OnPostprocessAudio | オーディオクリップのインポート完了時に通知される |
| OnPostprocessCubemap | キューブマップテクスチャのインポート完了直前に通知される |
| OnPostprocessGameObjectWithUserProperties | ユーザープロパティが付けられたゲームオブジェクトのインポート時に呼び出される |
| OnPostprocessMaterial | マテリアルアセットのインポート完了時に通知される |
| OnPostprocessModel | モデルのインポート完了時に通知される |
| OnPostprocessSpeedTree | SpeedTreeアセットのインポート完了時に通知される |
| OnPostprocessSprites | スプライトテクスチャのインポート完了時に通知される |
| OnPostprocessTexture | テクスチャのインポート完了直前に通知される |
| OnPreprocessAnimation | アニメーションのインポート直前に通知される |
| OnPreprocessAsset | 任意のアセットのインポート直前に通知される |
| OnPreprocessAudio | オーディオクリップのインポート直前に通知される |
| OnPreprocessModel | モデルのインポート直前に通知される |
| OnPreprocessSpeedTree | SpeedTreeアセットのインポート直前に通知される |
| OnPreprocessTexture | テクスチャインポーター実行前に通知される |
サンプル
using UnityEngine; using UnityEditor; public class MyAssetPostprocessor : AssetPostprocessor { void OnPreprocessTexture() { if (assetPath.Contains("SomeSpecificFolder")) { TextureImporter textureImporter = (TextureImporter)assetImporter; textureImporter.textureCompression = TextureImporterCompression.Uncompressed; } } static void OnPostprocessAllAssets( string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { foreach (string str in importedAssets) { Debug.Log("Asset Imported: " + str); } } }
このサンプルでは、特定のフォルダ内のテクスチャの圧縮設定を変更し、インポートされたアセットのパスをログに出力しています。
AssetModificationProcessorの概要
Unityのエディタ内でのアセットの管理と操作をより細かくコントロールするためには、「AssetModificationProcessor」が重要な役割を果たします。このクラスは、アセットの作成、削除、移動、保存などのイベントに対してカスタム処理を実装することができます。これにより、開発プロセス中にアセットに対する特定の操作が行われる際に、追加の処理や制約を設定することが可能となります。
主なメソッド
| メソッド名 | 説明 |
|---|---|
| OnWillCreateAsset | アセットが作成される直前に呼び出される |
| OnWillDeleteAsset | アセットが削除される直前に呼び出される |
| OnWillMoveAsset | アセットが移動される直前に呼び出される |
| OnWillSaveAssets | アセットが保存される直前に呼び出される |
| IsOpenForEdit | アセットが編集可能かどうかを判断する |
| CanOpenForEdit | アセットを編集するために開くことができるかどうかを判断する |
| StartAssetEditing | アセットの編集セッションを開始する |
| EndAssetEditing | アセットの編集セッションを終了する |
AssetModificationProcessorは、Unityエディタ内でのアセットの変更や保存のプロセスをカスタマイズするために使用されます。これらのメソッドを使用して、特定のアセットの操作に特別な処理を追加したり、特定の条件下での操作を制限したりすることができます。例えば、アセットが削除される前に特定のクリーンアップ処理を実行する、または特定のアセットの編集を制限するなどのカスタマイズが可能です。
サンプル
using UnityEngine; using UnityEditor; public class MyAssetModificationProcessor : UnityEditor.AssetModificationProcessor { public static string[] OnWillSaveAssets(string[] paths) { Debug.Log("Assets being saved:"); foreach (string path in paths) { Debug.Log(path); } // ファイル保存の前に行いたい処理をここに記述 return paths; } public static AssetDeleteResult OnWillDeleteAsset(string assetPath, RemoveAssetOptions option) { Debug.Log("Asset being deleted: " + assetPath); // アセット削除の前に行いたい処理をここに記述 return AssetDeleteResult.DidNotDelete; } }
このサンプルでは、アセットが保存または削除される前に、そのパスをログに出力しています。また、任意の追加処理を行うことも可能です。
リファレンス
UnityEditor.AssetPostprocessor - Unity スクリプトリファレンス
AssetModificationProcessor - Unity スクリプトリファレンス