プロジェクト全体のパイプライン効率を高めるために、新規アセットインポート時の設定自動化(モバイル用圧縮テクスチャ形式への自動変更など)を実装した際に、最も遭遇しやすい無限ループバグの回避策です。

\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