プロジェクト全体のパイプライン効率を高めるために、新規アセットインポート時の設定自動化(モバイル用圧縮テクスチャ形式への自動変更など)を実装した際に、最も遭遇しやすい無限ループバグの回避策です。
\n\n主な原因
`AssetPostprocessor` のイベントハンドラ(例: `OnPostprocessTexture`)は、Unityがアセットのインポート処理を完了させようとする「まさにその瞬間」にフックされます。その処理中に、「設定が変わったからもう一度データベースを更新してインポートし直してね」という命令(`ImportAsset` や `WriteImportSettingsIfDirty`)を明示的に呼び出してしまうと、Unityは再び最初からインポートを開始し、終わらない処理の輪(無限ループ)が完成します。
具体的な解決方法
再帰インポートを完全に防ぐ、正しい `AssetPostprocessor` の記述方法です。
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
public class TextureAutoImporter : AssetPostprocessor
{
// ➔ インポート前に設定を上書きするイベントを使用する(推奨)
void OnPreprocessTexture()
{
TextureImporter textureImporter = (TextureImporter)assetImporter;
// 現在の設定値を確認し、すでに意図した設定になっている場合は処理をバイパスする
if (textureImporter.mipmapEnabled == false)
{
// プロパティを書き換えるだけ! (SaveAssetsやImportAssetは絶対に呼ばない)
textureImporter.mipmapEnabled = true;
// ※Unity内部が「Dirty(変更あり)」と検出し、自動で1回だけインポート設定が保存されます
}
}
}
#endif