class in UnityEditor.Experimental.AssetImporters
/
Hereda de:Editor
Cambiar al ManualDefault editor for all asset importer settings.
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.Experimental.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 needsApplyRevert.
using System.IO; using UnityEditor; using UnityEditor.Experimental.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 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.Experimental.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.Experimental.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) { // ... } }
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 |
HasModified | Determine if the import settings have been modified. |
OnDisable | This function is called when the editor object goes out of scope. |
OnEnable | Esta función se llama cuando el objeto es cargado. |
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. |
Awake | This function is called when the Editor script is started. |
OnApplyRevertGUI | Process the 'Apply' and 'Revert' buttons. |
ResetValues | Reset the import settings to their last saved values. |
RevertButton | Implements the 'Revert' button of the inspector. |
serializedObject | Un SerializedObject representando el objeto u objetos siendo inspeccionados. |
target | El objeto siendo inspeccionado. |
targets | Un arreglo de todos los objetos siendo inspeccionados. |
hideFlags | Should the object be hidden, saved with the Scene or modifiable by the user? |
name | El nombre del objeto. |
DrawDefaultInspector | Draws the built-in inspector. |
DrawHeader | Llame esta función para dibujar el encabezado del editor. |
DrawPreview | El primer punto de entrada para Preview Drawing. |
GetInfoString | Implemente este método para mostrar información asset encima de la pre-visualización del asset. |
GetPreviewTitle | Anule este método si desea cambiar la etiqueta del área de vista previa. |
HasPreviewGUI | Anule este método en las sub-classes si usted implementa OnPreviewGUI. |
OnInspectorGUI | Implemente esta función para crear un inspector personalizado. |
OnInteractivePreviewGUI | Implemente para crear su propia vista previa personalizada interactiva. Las vistas previas interactivas personalizadas se utilizan en el área de vista previa del inspector y el selector de objetos. |
OnPreviewGUI | Implement to create your own custom preview for the preview area of the inspector, the headers of the primary editor, and the object selector. |
OnPreviewSettings | Anule este método si desea mostrar controles personalizados en el encabezado de la vista previa. |
RenderStaticPreview | Override this method if you want to render a static preview. |
Repaint | Redraw any inspectors that shows this editor. |
RequiresConstantRepaint | Checks if this editor requires constant repaints in its current state. |
UseDefaultMargins | Anule este método en subclases para devolver false si no desea márgenes predeterminados. |
GetInstanceID | Devuelve el id de la instancia del objeto. |
ToString | Returns the name of the object. |
ShouldHideOpenButton | Returns the visibility setting of the "open" button in the Inspector. |
CreateCachedEditor | On return previousEditor is an editor for targetObject or targetObjects. The function either returns if the editor is already tracking the objects, or destroys the previous editor and creates a new one. |
CreateCachedEditorWithContext | Creates a cached editor using a context object. |
CreateEditor | Crea un editor personalizado para targetObject o targetObjects. |
CreateEditorWithContext | Make a custom editor for targetObject or targetObjects with a context object. |
Destroy | Removes a GameObject, component or asset. |
DestroyImmediate | Destroys the object obj immediately. You are strongly recommended to use Destroy instead. |
DontDestroyOnLoad | Do not destroy the target Object when loading a new Scene. |
FindObjectOfType | Devuelve el primer objeto activo cargado de tipo type. |
FindObjectsOfType | Devuelve una lista de todos los objetos activos cargados de tipo type. |
Instantiate | Clona el objeto original y devuelve el clon. |
CreateInstance | Crea una instancia de un objeto scriptable. |
bool | ¿Existe el objeto? |
operator != | Compare si dos objetos se refieren a un objeto diferente. |
operator == | Compara dos referencias de objeto para ver si se refieren al mismo objeto. |
OnSceneGUI | Enables the Editor to handle an event in the Scene view. |
OnDestroy | Esta función se llama cuando el objeto scriptable se destruirá. |
finishedDefaultHeaderGUI | An event raised while drawing the header of the Inspector window, after the default header items have been drawn. |