Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Скриптовые импортеры являются частью Unity Scripting API. Вы можете использовать Scripted Importers для написания пользовательских импортеров активов на C#, что позволит вам добавить собственную поддержку форматов файлов, изначально не поддерживаемых Unity.

Вы можете создать собственный импортер, выделив абстрактный класс ScriptedImporter и применив атрибут ScriptedImporter. Это регистрирует ваш пользовательский импортер для обработки одного или нескольких расширений файлов. Когда файл, соответствующий зарегистрированным расширениям файлов, определяется конвейером ресурсов как новый или измененный, Unity вызывает метод OnImportAsset вашего пользовательского импортера.

Примечание. Импортеры со сценариями не могут обрабатывать расширения файлов, которые уже изначально обрабатываются Unity.

Пример

Ниже приведен простой пример Scripted Importer: он импортирует файлы ресурсов с расширением «куб» в Prefab UnityAn Тип актива, который позволяет хранить GameObject вместе с компонентами и свойствами. Префаб действует как шаблон, из которого вы можете создавать новые экземпляры объектов в сцене. Подробнее
См. в Словарь
с кубическим примитивом в качестве основного актива и материалом по умолчанию и цвет и присваивает его позицию на основе значения, считанного из файла ресурсов:

using UnityEngine; using UnityEditor.AssetImporters; using System.IO; [ScriptedImporter(1, "cube")] public class CubeImporter : ScriptedImporter { public float m_Scale = 1; public override void OnImportAsset(AssetImportContext ctx) { var cube = GameObject.CreatePrimitive(PrimitiveType.Cube); var position = JsonUtility.FromJson(File.ReadAllText(ctx.assetPath)); cube.transform.position = position; cube.transform.localScale = new Vector3(m_Scale, m_Scale, m_Scale); // 'cube' is a GameObject and will be automatically converted into a prefab // (Only the 'Main Asset' is eligible to become a Prefab.) ctx.AddObjectToAsset("main obj", cube); ctx.SetMainObject(cube); var material = new Material(Shader.Find("Standard")); material.color = Color.red; // Assets must be assigned a unique identifier string consistent across imports ctx.AddObjectToAsset("my Material", material); // Assets that are not passed into the context as import outputs must be destroyed var tempMesh = new Mesh(); DestroyImmediate(tempMesh); } }

Примечание:

  • Импортер регистрируется в конвейере ресурсов Unity путем размещения атрибута ScriptedImporter в классе CubeImporter.
  • Класс CubeImporter реализует абстрактный базовый класс ScriptedImporter.
  • Аргумент ctx OnImportAsset содержит как входные, так и выходные данные для события импорта.
  • Каждое событие импорта должно генерировать один (и только один) вызов SetMainAsset.
  • Каждое событие импорта может генерировать столько вызовов AddSubAsset, сколько необходимо.
  • Дополнительные сведения см. в документации API сценариев.

Вы также можете реализовать собственный редактор параметров импорта, выделив класс ScriptedImporterEditor и добавив в него атрибут класса . CustomEditor, чтобы указать, для какого типа импортера он используется.

Например:

using UnityEditor; using UnityEditor.AssetImporters; using UnityEditor.SceneManagement; using UnityEngine; [CustomEditor(typeof(CubeImporter))] public class CubeImporterEditor: ScriptedImporterEditor { public override void OnInspectorGUI() { var colorShift = new GUIContent("Color Shift"); var prop = serializedObject.FindProperty("m_ColorShift"); EditorGUILayout.PropertyField(prop, colorShift); base.ApplyRevertGUI(); } }

Использование импортера по сценарию

После того как вы добавили в проект класс импортера со сценарием, вы можете использовать его так же, как и любой другой собственный тип файла, поддерживаемый Unity:

  • Перетащите поддерживаемый файл в иерархию каталогов объектов для импорта.
  • Перезапуск редактора Unity повторно импортирует все файлы, которые изменились с момента последнего обновления.
  • Редактирование файла объекта на диске и возврат в редактор Unity вызывает повторный импорт.
  • Импортируйте новый ресурс, используя Assetлюбой носитель или данные, которые можно использовать в вашей игре или проекте. Ресурс может быть получен из файла, созданного вне Unity, например, из 3D-модели, аудиофайла или изображения. Вы также можете создавать некоторые типы ресурсов в Unity, например контроллер аниматора, аудиомикшер или текстуру рендеринга. Подробнее
    См. в разделе Словарь
    > Импорт нового объекта….
  • Явно инициируйте повторный импорт через меню: Актив > Повторный импорт.
  • Нажмите на объект, чтобы просмотреть его настройки в окне инспектора. Чтобы изменить его настройки, отредактируйте их в Инспектореокне Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, позволяя вам проверять и редактировать значения. Подробнее
    Просмотрите в окне Словарь
    и нажмите Применить .
Окно инспектора актива (Девушка-перегонщик), импортированного с помощью скриптового импортера
Окно инспектора ассета (Девушка-перегонщик), импортированного с помощью Scripted Importer

Реальное использование импортеров по сценарию

  • Alembic: импортер Alembic плагинНабор кода, созданный вне Unity, который создает функциональные возможности в Единство. В Unity можно использовать два типа подключаемых модулей: управляемые подключаемые модули (управляемые сборки .NET, созданные с помощью таких инструментов, как Visual Studio) и собственные подключаемые модули (библиотеки собственного кода для конкретной платформы). Подробнее
    See in Словарь
    был обновлен для использования модуля импорта по сценарию. Для получения дополнительной информации посетите Unity github: AlembicImporter.

  • USD: подключаемый модуль импортера USD был обновлен для использования импортера по сценарию. Для получения дополнительной информации посетите Unity github:: USDForUnity.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3