AssetImporterEditor
Default editor for all asset importer settings.
Read time 10 minutesLast updated 11 days ago
Definition
- Type: Class
- Namespace: UnityEditor.AssetImporters
- Assembly: UnityEditor
- Inherits from: Editor
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 |
|---|---|
| extraDataSerializedObject | A SerializedObject that represents the AssetImporterEditor.extraDataTarget or the AssetImporterEditor.extraDataTargets of the AssetImporterEditor. |
| extraDataTarget | The extra data object associated with the Editor.target. |
| extraDataTargets | An array of objects associated with each Editor.targets. |
| extraDataType | Override this property to return a type that inherits from ScriptableObject. This makes the AssetImporterEditor aware of serialized data outside of the Importer. |
| needsApplyRevert | Whether the ApplyRevertGUI method is required to draw in the Inspector. |
| showImportedObject | Should imported object be shown as a separate editor? |
| useAssetDrawPreview | Determines if the asset preview is handled by the AssetEditor or the Importer DrawPreview |
Methods
Method | Description |
|---|---|
| Apply | Saves any changes from the Editor's control into the asset's import settings object. |
| ApplyButton | Implements the 'Apply' button of the inspector. |
| ApplyRevertGUI | Add's the 'Apply' and 'Revert' buttons to the editor. |
| AreImporterTargetsValid | Determines whether every inspected importer target still exists. |
| Awake | This function is called when the Editor script is started. |
| CanApply | Determines if the modifications to import settings can be applied. |
| DiscardChanges | Discards unsaved changes to the contents of the editor. |
| DrawPreview | The first entry point for Preview Drawing. |
| HasModified | Determine if the import settings have been modified. |
| InitializeExtraDataInstance | This method is called during the initialization process of the Editor, after Awake and before OnEnable. |
| OnApplyRevertGUI | Process the 'Apply' and 'Revert' buttons. |
| OnDisable | This function is called when the editor object goes out of scope. |
| OnEnable | This function is called when the object is loaded. |
| OnInspectorGUI | Override this method to create your own Inpsector GUI for a ScriptedImporter. |
| RevertButton | Implements the 'Revert' button of the inspector. |
| SaveChanges | Performs a save action on the contents of the editor. |
Inheritance
Operators
Operator | Description |
|---|---|
| operator == | Compares two object references to see if they refer to the same object. |
| bool | Determines whether the object exists. |
| operator != | Compares if two objects refer to a different object. |