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

ScriptedImporter.OnImportAsset

Объявление

public void OnImportAsset(AssetImporters.AssetImportContext ctx);

Параметры

ctx Этот аргумент содержит всю контекстуальную информацию, необходимую для обработки события импорта, а также используется настраиваемым импортером для хранения результирующего ресурса Unity.

Описание

Этот метод должен быть переопределен производным классом и вызывается конвейером активов для импорта файлов.

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<Vector3>(File.ReadAllText(ctx.assetPath)); cube.transform.position = position; cube.transform.localScale = new Vector3(m_Scale, m_Scale, m_Scale); // 'куб' является GameObject и будет автоматически преобразован в префаб // (Только 'Main Asset' может стать префабом.) ctx.AddObjectToAsset("main obj", cube); ctx.SetMainObject(cube); var material = new Material(Shader.Find("Standard")); ctx.DependsOnCustomDependency("StandardShaderDependencyHash"); material.color = Color.red; // Ресурсам должна быть назначена уникальная строка идентификатора, согласованная при импорте ctx.AddObjectToAsset("my Material", material); // Активы, которые не передаются в контекст в качестве выходных данных импорта, должны быть уничтожены var tempMesh = new Mesh(); DestroyImmediate(tempMesh); } }

Чтобы использовать функцию Shader.Find() в приведенном выше примере, вам нужно написать пользовательскую зависимость для шейдера, который вы хотите найти, и регулярно обновлять его. Это не позволяет функции Shader.Find() обходить другие средства проверки зависимостей. Приведенный ниже код является примером того, как вы можете написать пользовательскую зависимость для этой цели.

using UnityEditor; using UnityEngine; static class ShaderDependencyUpdater { [InitializeOnLoadMethod] static void ShaderDependencyInit() { EditorApplication.update += ShaderDependencyUpdate; } static void ShaderDependencyUpdate() { var shader = Shader.Find("Standard"); AssetDatabase.TryGetGUIDAndLocalFileIdentifier(shader, out var guid, out long id); var hash = new Hash128(); hash.Append(guid); hash.Append(id); AssetDatabase.RegisterCustomDependency("StandardShaderDependencyHash", hash); } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3