Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


AssetImporterEditor

Default editor for all asset importer settings.
Read time 10 minutesLast updated 11 days ago

Definition

public abstract class AssetImporterEditor : Editor

Remarks

Use the default editor to edit the import settings for assets. You can define a custom import settings editor for a specific asset type. To do this, create a new class that inherits from AssetImporterEditor and uses a CustomEditorAttribute that refers to a ScriptedImporter.
The following example shows how to make a custom ScriptedImporterEditor for a ScriptedImporter with a custom layout.
using System.IO;using UnityEditor;using UnityEditor.AssetImporters;using UnityEngine;[CustomEditor(typeof(TransformImporter))][CanEditMultipleObjects]public class TransformImporterEditor : ScriptedImporterEditor{ // Stored SerializedProperty to draw in OnInspectorGUI. SerializedProperty m_GenerateChild; public override void OnEnable() { base.OnEnable(); // Once in OnEnable, retrieve the serializedObject property and store it. m_GenerateChild = serializedObject.FindProperty("generateChild"); } public override void OnInspectorGUI() { // Update the serializedObject in case it has been changed outside the Inspector. serializedObject.Update(); // Draw the boolean property. EditorGUILayout.PropertyField(m_GenerateChild); // Apply the changes so Undo/Redo is working serializedObject.ApplyModifiedProperties(); // Call ApplyRevertGUI to show Apply and Revert buttons. ApplyRevertGUI(); }}[ScriptedImporter(0, ".transform")]public class TransformImporter : ScriptedImporter{ public bool generateChild; public override void OnImportAsset(AssetImportContext ctx) { GameObject root = ObjectFactory.CreateGameObject(Path.GetFileNameWithoutExtension(ctx.assetPath)); if (generateChild) { GameObject child = ObjectFactory.CreateGameObject("child"); child.transform.SetParent(root.transform); } ctx.AddObjectToAsset("main", root); ctx.SetMainObject(root); }}
The following example demonstrates a specific case where the user cannot change settings and the Apply/Revert buttons are hidden with AssetImporterEditor.needsApplyRevert.
using System.IO;using UnityEditor;using UnityEditor.AssetImporters;using UnityEngine;[CustomEditor(typeof(EmptinessImporter))][CanEditMultipleObjects]public class EmptinessImporterEditor : ScriptedImporterEditor{ //Let the parent class know that the Apply/Revert mechanism is skipped. protected override bool needsApplyRevert => false; public override void OnInspectorGUI() { // Draw some information EditorGUILayout.HelpBox("Because this Importer doesn't have any settings, the Apply/Revert buttons are hidden.", MessageType.None); }}[ScriptedImporter(0, ".emptiness")]public class EmptinessImporter : ScriptedImporter{ public override void OnImportAsset(AssetImportContext ctx) { GameObject root = ObjectFactory.CreateGameObject(Path.GetFileNameWithoutExtension(ctx.assetPath)); ctx.AddObjectToAsset("main", root); ctx.SetMainObject(root); }}
The following example shows how to use AssetImporterEditor.extraDataType to read or save settings that are not part of the ScriptedImporter serialization, in the custom AssetImporterEditor.
using System;using System.IO;using UnityEditor;using UnityEditor.AssetImporters;using UnityEngine;using Object = UnityEngine.Object;[CustomEditor(typeof(BooleanImporter))][CanEditMultipleObjects]public class BooleanImporterEditor : ScriptedImporterEditor{ // Property to show in the custom OnInspectorGUI. SerializedProperty m_BooleanProperty; // override extraDataType to return the type that will be used in the Editor. protected override Type extraDataType => typeof(BooleanClass); // override InitializeExtraDataInstance to set up the data. protected override void InitializeExtraDataInstance(Object extraTarget, int targetIndex) { var boolean = (BooleanClass)extraTarget; // Read the boolean value from the text file and fill the extraTarget object with the data. string fileContent = File.ReadAllText(((AssetImporter)targets[targetIndex]).assetPath); if (!bool.TryParse(fileContent, out boolean.boolean)) { boolean.boolean = false; } } protected override void Apply() { base.Apply(); // After the Importer is applied, rewrite the file with the custom value. for (int i = 0; i < targets.Length; i++) { string path = ((AssetImporter)targets[i]).assetPath; File.WriteAllText(path, ((BooleanClass)extraDataTargets[i]).boolean.ToString()); } } public override void OnEnable() { base.OnEnable(); // In OnEnable, retrieve the importerUserSerializedObject property and store it. m_BooleanProperty = extraDataSerializedObject.FindProperty("boolean"); } public override void OnInspectorGUI() { // Note: you don't need to call serializedObject.Update or serializedObject.ApplyModifiedProperties // because you are not changing the target (serializedObject) itself. // Update the importerUserSerializedObject in case it has been changed outside the Inspector. extraDataSerializedObject.Update(); // Draw the boolean property. EditorGUILayout.PropertyField(m_BooleanProperty); // Apply the changes so Undo/Redo is working. extraDataSerializedObject.ApplyModifiedProperties(); // Call ApplyRevertGUI to show Apply and Revert buttons. ApplyRevertGUI(); }}public class BooleanClass : ScriptableObject{ public bool boolean;}[ScriptedImporter(0, ".boolean")]public class BooleanImporter : ScriptedImporter{ public override void OnImportAsset(AssetImportContext ctx) { string fileContent = File.ReadAllText(ctx.assetPath); var booleanObj = ObjectFactory.CreateInstance<BooleanClass>(); if (!bool.TryParse(fileContent, out booleanObj.boolean)) { booleanObj.boolean = false; } ctx.AddObjectToAsset("main", booleanObj); ctx.SetMainObject(booleanObj); Debug.Log("Imported Boolean value: " + booleanObj.boolean); }}
You can also use ScriptedImporter settings and extraData in the same AssetImporterEditor:
using UnityEditor;using UnityEditor.AssetImporters;[CustomEditor(typeof(SomeScriptedImporter))][CanEditMultipleObjects]public class SomeImporterEditor : ScriptedImporterEditor{ // ... public override void OnInspectorGUI() { serializedObject.Update(); extraDataSerializedObject.Update(); // Use propertyDrawers and custom GUI for any property from both serializedObject and extraDataSerializedObject. extraDataSerializedObject.ApplyModifiedProperties(); serializedObject.ApplyModifiedProperties(); ApplyRevertGUI(); }}[ScriptedImporter(0, ".someFile")]public class SomeScriptedImporter : ScriptedImporter{ public override void OnImportAsset(AssetImportContext ctx) { // ... }}

Properties

Property

Description

extraDataSerializedObjectA SerializedObject that represents the AssetImporterEditor.extraDataTarget or the AssetImporterEditor.extraDataTargets of the AssetImporterEditor.
extraDataTargetThe extra data object associated with the Editor.target.
extraDataTargetsAn array of objects associated with each Editor.targets.
extraDataTypeOverride this property to return a type that inherits from ScriptableObject. This makes the AssetImporterEditor aware of serialized data outside of the Importer.
needsApplyRevertWhether the ApplyRevertGUI method is required to draw in the Inspector.
showImportedObjectShould imported object be shown as a separate editor?
useAssetDrawPreviewDetermines if the asset preview is handled by the AssetEditor or the Importer DrawPreview

Methods

Method

Description

ApplySaves any changes from the Editor's control into the asset's import settings object.
ApplyButtonImplements the 'Apply' button of the inspector.
ApplyRevertGUIAdd's the 'Apply' and 'Revert' buttons to the editor.
AreImporterTargetsValidDetermines whether every inspected importer target still exists.
AwakeThis function is called when the Editor script is started.
CanApplyDetermines if the modifications to import settings can be applied.
DiscardChangesDiscards unsaved changes to the contents of the editor.
DrawPreviewThe first entry point for Preview Drawing.
HasModifiedDetermine if the import settings have been modified.
InitializeExtraDataInstanceThis method is called during the initialization process of the Editor, after Awake and before OnEnable.
OnApplyRevertGUIProcess the 'Apply' and 'Revert' buttons.
OnDisableThis function is called when the editor object goes out of scope.
OnEnableThis function is called when the object is loaded.
OnInspectorGUIOverride this method to create your own Inpsector GUI for a ScriptedImporter.
RevertButtonImplements the 'Revert' button of the inspector.
SaveChangesPerforms a save action on the contents of the editor.

Inheritance

Inherited Members

Operators

Operator

Description

operator ==Compares two object references to see if they refer to the same object.
boolDetermines whether the object exists.
operator !=Compares if two objects refer to a different object.