Unity 6.3
0 онлайн 67 гостей 3 в системе
Вход

AssetImporterEditor

класс в UnityEditor.AssetImporters

Наследуется от:Editor

Описание

Редактор по умолчанию для всех настроек импортера ассетов.

Для изменения настроек импорта ассетов служит стандартный редактор. Для конкретного типа ассетов можно задать собственный редактор настроек импорта: объявите новый класс, наследующий AssetImporterEditor, и примените к нему CustomEditorAttribute со ссылкой на ScriptedImporter.

В следующем примере показано, как создать пользовательский ScriptedImporterEditor для ScriptedImporter с пользовательским макетом.

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); } }

Следующий пример демонстрирует конкретный случай, когда пользователь не может изменить настройки, а кнопки Применить/Возвратить скрыты с помощью 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); } }

В следующем примере показано, как использовать extraDataType для чтения или сохранения параметров, являющихся частью импортированного ассета, в пользовательском 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 extraDataSerializedObject property and store it. m_BooleanProperty = extraDataSerializedObject.FindProperty("boolean"); }

public override void OnInspectorGUI() { // Update the extraDataSerializedObject 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); } }

Вы также можете использовать настройки ScriptedImporter и extraData в том же 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) { // ... } }

Свойства

Свойство Описание
extraDataSerializedObjectSerializedObject, который представляет extraDataTarget или extraDataTargets из AssetImporterEditor.
extraDataTargetДополнительный объект данных, связанный с Editor.target.
extraDataTargetsМассив объектов, связанных с каждым Editor.targets.
extraDataTypeПереопределите это свойство, чтобы возвратить тип, наследуемый от ScriptableObject. Это делает AssetImporterEditor осведомленным о серийных данных вне Импортера, позволяя ему обрабатывать состояния многократного выбора и кнопки Применить/Возвратить.
needsApplyRevertТребуется ли метод ApplyRevertGUI для рисования в Inspector.
showImportedObjectДолжен ли импортированный объект отображаться как отдельный редактор?
useAssetDrawPreviewОпределяет, обрабатывается ли предварительный просмотр ассета AssetEditor или импортером DrawPreview

Открытые методы

Метод Описание
HasModifiedОпределите, были ли изменены параметры импорта.
OnDisableЭта функция вызывается, когда объект редактора выходит за пределы области действия.
OnEnableЭта функция вызывается при загрузке объекта.
OnInspectorGUIПереопределите этот метод, чтобы создать свой собственный Inpsector GUI для ScriptedImporter.

Защищенные методы

Метод Описание
ApplyСохраняет любые изменения, внесенные в управление Редактора, в объект параметров импорта ассета.
ApplyButtonРеализует кнопку 'Применить' Inspector.
ApplyRevertGUIДобавлены кнопки 'Применить' и 'Возвратить' в редакторе.
AwakeЭта функция вызывается при запуске скрипта Редактора.
CanApplyОпределяет, могут ли быть применены изменения параметров импорта.
InitializeExtraDataInstanceЭтот метод вызывается во время процесса инициализации Редактора, после Awake и перед OnEnable.
OnApplyRevertGUIПроцесс "Применить" и "Возвратить" кнопки.
RevertButtonРеализует кнопку "Возврат" инспектора.
Унаследованные члены 7

Свойства

СвойствоОписание
hasUnsavedChangesЭто свойство определяет, требует ли Редактор от пользователя сохранить или отбросить несохранённые изменения перед тем, как Inspector будет перестроен.
saveChangesMessageСообщение, которое отображается пользователю при получении запроса на сохранение.
serializedObjectSerializedObject, обозначающее объект или объекты, подлежащие проверке.
targetИнспектируемый объект.
targetsМассив всех объектов, подлежащих проверке.
hideFlagsДолжен ли объект быть скрытым, сохраняться с Scene или изменяться пользователем?
nameИмя объекта.

Открытые методы

МетодОписание
CreateInspectorGUIИспользуйте этот метод для создания собственного инспектора UIElements.
CreatePreviewИспользуйте этот метод для создания собственного предварительного просмотра инспектора UIElements.
DiscardChangesОтбрасывает несохраненные изменения в содержимом редактора.
DrawDefaultInspectorЧертает встроенный Inspector.
DrawHeaderВызывайте эту функцию, чтобы нарисовать заголовок редактора.
DrawPreviewПервая точка входа для чертежа предварительного просмотра.
GetInfoStringИспользуйте этот метод для отображения информации об ассете вверху предварительного просмотра ассета.
GetPreviewTitleПереопределите этот метод, если вы хотите изменить метку области Предварительного просмотра.
HasPreviewGUIПереопределите этот метод в подклассах, если вы реализуете OnPreviewGUI.
OnInteractivePreviewGUIРеализация для создания собственного интерактивного пользовательского предварительного просмотра. Интерактивные пользовательские предварительные просмотры используются в области предварительного просмотра инспектора и выборщика объектов.
OnPreviewGUIСоздает пользовательский предварительный просмотр для области предварительного просмотра Inspector, заголовки основного редактора и объект selector.You должен осуществить Editor.HasPreviewGUI для вызова этого метода.
OnPreviewSettingsПереопределите этот метод, если вы хотите показать настраиваемые элементы управления в заголовке предварительного просмотра.
RenderStaticPreviewПереопределите этот метод, если хотите отрисовывать статичный предпросмотр.
RepaintПерекройте любые инспекторы, которые показывают этот редактор.
RequiresConstantRepaintПроверяет, требует ли этот редактор постоянных перерисовок в текущем состоянии.
SaveChangesВыполняет сохранение содержимого редактора.
UseDefaultMarginsПереопределите этот метод в подклассах, чтобы возвращать false, если вы не хотите полей по умолчанию.
GetInstanceIDПолучает экземпляр ID объекта.
ToStringВозвращает имя объекта.

Защищенные методы

МетодОписание
ShouldHideOpenButtonВозвращает настройку видимости кнопки "открыть" в Inspector.

Статические методы

МетодОписание
CreateCachedEditorПо возвращении previousEditor является редактором для targetObject или targetObjects. Функция либо возвращает, если редактор уже отслеживает объекты, либо уничтожает предыдущий редактор и создает новый.
CreateCachedEditorWithContextСоздает кэшированный редактор с помощью объекта контекста.
CreateEditorСоздайте пользовательский редактор для targetObject или targetObjects.
CreateEditorWithContextСоздайте пользовательский редактор для targetObject или targetObjects с контекстным объектом.
DrawFoldoutInspectorЧертает инспектор GUI с раскрывающимся заголовком для target.
DestroyУдаляет GameObject, компонент или ресурс.
DestroyImmediateНемедленно уничтожает указанный объект. Используйте с осторожностью и только в режиме редактирования.
DontDestroyOnLoadНе уничтожать целевой Объект при загрузке нового Scene.
FindAnyObjectByTypeПолучает любой активный загруженный объект типа Type.
FindFirstObjectByTypeПолучает первый активный загруженный объект типа Type.
FindObjectsByTypeПолучает список всех загруженных объектов типа Type.
InstantiateКлонирует исходный объект и возвращает клон.
InstantiateAsyncЗахватывает моментальный снимок первоначального объекта (который должен быть связан с каким-либо GameObject) и возвращает AsyncInstantiateOperation.
CreateInstanceСоздает экземпляр скриптового объекта.

Операторы

ОператорОписание
boolСуществует ли объект?
оператор!=Сравнивает, если два объекта ссылаются на разные объекты.
оператор ==Сравнение двух ссылок на объекты для определения того, относятся ли они к одному и тому же объекту.

Сообщения

СообщениеОписание
HasFrameBoundsПроверяет, можно ли рассчитать настраиваемые границы для этого редактора.
OnGetFrameBoundsПолучить настраиваемые границы для цели этого редактора.
OnSceneGUIПозволяет Редактору обрабатывать событие в представлении Scene.
OnDestroyЭта функция вызывается, когда скриптовый объект будет уничтожен.
OnValidateФункция только для редактора, которую вызывает Unity при загрузке скрипта или изменении значения в Inspector.
ResetСброс значений по умолчанию.

Мероприятия

МероприятиеОписание
finishedDefaultHeaderGUIСобытие, возникающее при рисовании заголовка окна Inspector, после того, как были нарисованы элементы заголовка по умолчанию.