Описание
Редактор по умолчанию для всех настроек импортера объектов.
Используйте редактор по умолчанию, чтобы изменить настройки импорта ресурсов. Вы можете определить пользовательский редактор настроек импорта для определенного типа активов. Для этого создайте новый класс, наследуемый от 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 для чтения или сохранения настроек, не являющихся частью сериализации ScriptedImporter, в пользовательском редакторе 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();
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 и дополнительные данные в том же редакторе 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)
{
// ...
}
}
Свойства
extraDataSerializedObject |
SerializedObject, представляющий extraDataTarget или extraDataTargets объекта AssetImporterEditor. |
extraDataTarget |
Дополнительный объект данных, связанный с Editor.target. |
extraDataTargets |
Массив объектов, связанных с каждым объектом Editor.targets. |
extraDataType |
Переопределите это свойство, чтобы вернуть тип, наследуемый от ScriptableObject. Это делает AssetImporterEditor осведомленным о сериализованных данных вне импортера. |
needsApplyRevert |
Требуется ли метод ApplyRevertGUI для рисования в Инспекторе. |
showImportedObject |
Должен ли импортируемый объект отображаться в отдельном редакторе? |
useAssetDrawPreview |
Определяет, обрабатывается ли предварительный просмотр ресурсов с помощью AssetEditor или Importer DrawPreview |
Публичные Методы
HasModified |
Определите, были ли изменены настройки импорта. |
OnDisable |
Эта функция вызывается, когда объект редактора выходит за пределы области видимости. |
OnEnable |
Эта функция вызывается при загрузке объекта. |
OnInspectorGUI |
Переопределите этот метод, чтобы создать собственный графический интерфейс Inpsector для ScriptedImporter. |
Защищенные методы
Apply |
Сохраняет любые изменения из элемента управления редактора в объект настроек импорта актива. |
ApplyAndImport |
Сохраняет изменения пользовательского интерфейса редактора в объект настроек и импортирует ресурс. |
ApplyButton |
Реализует кнопку "Применить" инспектора. |
ApplyRevertGUI |
Добавьте в редактор кнопки "Применить" и "Отменить". |
Awake |
Эта функция вызывается при запуске сценария редактора. |
CanApply |
Определяет, могут ли применяться изменения настроек импорта. |
ИнициализироватьExtraDataInstance |
Этот метод вызывается в процессе инициализации редактора, после пробуждения и перед включением OnEnable. |
OnApplyRevertGUI |
Обработка кнопок "Применить" и "Отменить". |
ResetValues |
Сбросить настройки импорта до последних сохраненных значений. |
RevertButton |
Реализует кнопку "Вернуть" инспектора. |
Унаследованные члены
Свойства
serializedObject |
SerializedObject, представляющий проверяемый объект или объекты. |
target |
Инспектируемый объект. |
targets |
Массив всех проверяемых объектов. |
hideFlags |
Должен ли объект быть скрыт, сохранен вместе со сценой или изменен пользователем? |
name |
Имя объекта. |
Публичные Методы
CreateInspectorGUI |
Реализуйте этот метод, чтобы создать собственный инспектор UIElements. |
DrawDefaultInspector |
Рисует встроенный инспектор. |
DrawHeader |
Вызовите эту функцию, чтобы нарисовать заголовок редактора. |
DrawPreview |
Первая точка входа для предварительного просмотра чертежа. |
GetInfoString |
Реализуйте этот метод, чтобы отображать информацию об активе поверх предварительного просмотра актива. |
GetPreviewTitle |
Переопределите этот метод, если хотите изменить метку области предварительного просмотра. |
HasPreviewGUI |
Переопределите этот метод в подклассах, если вы реализуете OnPreviewGUI. |
OnInteractivePreviewGUI |
Реализация для создания собственного интерактивного пользовательского предварительного просмотра. Интерактивные пользовательские предварительные просмотры используются в области предварительного просмотра инспектора и селектора объектов. |
OnPreviewGUI |
Реализовать создание собственного пользовательского предварительного просмотра для области предварительного просмотра инспектора, заголовков основного редактора и селектора объектов. |
OnPreviewSettings |
Переопределите этот метод, если вы хотите отображать пользовательские элементы управления в заголовке предварительного просмотра. |
RenderStaticPreview |
Переопределите этот метод, если вы хотите визуализировать статический предварительный просмотр. |
Repaint |
Перерисовать все инспекторы, отображающие этот редактор. |
RequiresConstantRepaint |
Проверяет, требует ли этот редактор постоянной перерисовки в его текущем состоянии. |
UseDefaultMargins |
Переопределите этот метод в подклассах, чтобы он возвращал false, если вам не нужны поля по умолчанию. |
GetInstanceID |
Возвращает идентификатор экземпляра объекта. |
ToString |
Возвращает имя объекта. |
Защищенные методы
Статические Методы
CreateCachedEditor |
По возвращении предыдущийредактор является редактором для targetObject или targetObjects. Функция либо возвращает значение, если редактор уже отслеживает объекты, либо уничтожает предыдущий редактор и создает новый. |
CreateCachedEditorWithContext |
Создает кэшированный редактор, используя объект контекста. |
CreateEditor |
Создайте собственный редактор для targetObject или targetObjects. |
CreateEditorWithContext |
Создайте собственный редактор для targetObject или targetObjects с контекстным объектом. |
DrawFoldoutInspector |
Рисует графический интерфейс инспектора с раскрывающимся заголовком для цели. |
Destroy |
Удаляет игровой объект, компонент или ресурс. |
DestroyImmediate |
Немедленно уничтожает объект obj. Вместо этого вам настоятельно рекомендуется использовать Destroy. |
DontDestroyOnLoad |
Не уничтожайте целевой объект при загрузке новой сцены. |
FindObjectOfType |
Возвращает первый активный загруженный объект типа Type. |
FindObjectsOfType |
Получает список всех загруженных объектов типа Type. |
Instantiate |
Клонирует исходный объект и возвращает клон. |
CreateInstance |
Создает экземпляр объекта, доступного для сценария. |
Операторы
bool |
Объект существует? |
operator != |
Сравнивает, ссылаются ли два объекта на другой объект. |
operator == |
Сравнивает две ссылки на объекты, чтобы определить, ссылаются ли они на один и тот же объект. |
Сообщения
HasFrameBounds |
Проверяет, можно ли вычислить пользовательские границы для этого редактора. |
OnGetFrameBounds |
Получает пользовательские границы для цели этого редактора. |
OnSceneGUI |
Позволяет редактору обрабатывать событие в представлении "Сцена". |
OnDestroy |
Эта функция вызывается, когда объект, доступный для сценария, будет уничтожен. |
OnValidate |
Функция только для редактора, которую Unity вызывает при загрузке скрипта или изменении значения в Инспекторе. |
Reset |
Восстановить значения по умолчанию. |
События
finishedDefaultHeaderGUI |
Событие, возникающее при рисовании заголовка окна Инспектора после того, как были нарисованы элементы заголовка по умолчанию.. |