# OnPreprocessAsset()

> Add this function to a subclass to get a notification just before any Asset is imported.

## Definition

* **Type:** Method
* **Namespace:** [UnityEditor](/engine/6000.7/script-reference/unityeditor.md)

```csharp
public void OnPreprocessAsset()
```

### Remarks

This lets you control the import settings through code. Unlike other \`OnPreprocess\` callbacks such as OnPreprocessTexture or OnPreprocessModel, \`OnPreprocessAsset\` does not automatically register a dependency on the postprocessor. This means that if your subclass only implements \`OnPreprocessAsset\`, changing the value returned by [AssetPostprocessor.GetVersion](/engine/6000.7/script-reference/unityeditor/assetpostprocessor/getversion.md) does not trigger a reimport of affected assets. To register dependencies explicitly, use [AssetImportContext.DependsOnCustomDependency](/engine/6000.7/script-reference/unityeditor/assetimporters/assetimportcontext/dependsoncustomdependency.md) or [AssetImportContext.DependsOnArtifact](/engine/6000.7/script-reference/unityeditor/assetimporters/assetimportcontext/dependsonartifact.md) through the [AssetPostprocessor.context](/engine/6000.7/script-reference/unityeditor/assetpostprocessor/context.md) property. **Note:** If your subclass also implements another callback such as OnPreprocessTexture, the dependency is registered by that callback and [AssetPostprocessor.GetVersion](/engine/6000.7/script-reference/unityeditor/assetpostprocessor/getversion.md) works as expected.

### Examples

```csharp

using UnityEditor;

class PresetEnforcer : AssetPostprocessor
{
    void OnPreprocessAsset()
    {
        if (assetImporter.importSettingsMissing)
        {
            ModelImporter modelImporter = assetImporter as ModelImporter;
            if (modelImporter != null)
            {
                if (!assetPath.Contains("@"))
                    modelImporter.importAnimation = false;
                modelImporter.materialImportMode = ModelImporterMaterialImportMode.None;
            }
        }
    }
}
```

```csharp

using UnityEditor;
using UnityEngine;

//The following example registers an explicit custom dependency so that changing the dependency hash triggers a reimport of affected assets.

class PresetByFolderPostprocessor : AssetPostprocessor
{
    static readonly uint k_Version = 1;
    public override uint GetVersion() { return k_Version; }

    [InitializeOnLoadMethod]
    static void RegisterDependency()
    {
        AssetDatabase.RegisterCustomDependency(
            "PresetByFolderPostprocessor",
            Hash128.Compute(k_Version.ToString()));
    }

    void OnPreprocessAsset()
    {
        context.DependsOnCustomDependency("PresetByFolderPostprocessor");

        if (assetImporter.importSettingsMissing)
        {
            // Apply default import settings based on folder location.
        }
    }
}
```
