コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】AssetPostprocessor.OnPostprocessTexture で Default Preset を反映する例

ソースコード

using System.Text.RegularExpressions;
using UnityEditor;
using UnityEditor.Presets;
using UnityEngine;

public sealed class Example : AssetPostprocessor
{
    private static readonly Regex GLOB_REPLACE_PATTERN 
        = new Regex( @"^glob:""(.*)""" );

    private void OnPostprocessTexture( Texture2D texture )
    {
        var textureImporter = ( TextureImporter ) assetImporter;
        var presetType      = new PresetType( textureImporter );
        var defaultPresets  = Preset.GetDefaultPresetsForType( presetType );

        foreach ( var defaultPreset in defaultPresets )
        {
            var filter = defaultPreset.filter;
            filter = GLOB_REPLACE_PATTERN.Replace( filter, "$1" );

            filter = Regex
                    .Escape( filter )
                    .Replace( @"\*", ".*" )
                    .Replace( @"\?", "." )
                ;

            var isMatch = Regex.IsMatch( assetPath, filter );

            if ( !isMatch ) continue;

            defaultPreset.preset.ApplyTo( textureImporter );
        }
    }
}