Параметры
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);
}
}