AssetImportContext.DependsOnArtifact
Declaration
public void DependsOnArtifact(string path);public void DependsOnArtifact(GUID guid);public void DependsOnArtifact(Experimental.ArtifactKey key);Параметры
| Параметр | Описание |
|---|---|
| путь | Путь к Ассету, артефакт которого должен быть зависимостью. Обратите внимание: Хотя зависимостью является артефакт (результат импорта), который хранится в папке библиотеки, этот параметр является путем к Ассету в папке Assets, а , а не является путем к артефакту в папке Library. |
| ГУИД | Руководство по зависимости артефакта. |
| ключ | Ключ артефакта зависимости артефакта. |
Описание
Настройка зависимости артефакта от ассета.
Зависимость артефакта — это зависимость, в которой Ассет зависит от результата импорта (известного как артефакт) другого Ассета. Если вы измените Ассет, который был помечен как зависимость, все Ассеты, которые зависят от него, также будут реимпортированы (после того, как зависимость будет импортирована).
Если вы указываете ассет как зависимость, которая не существует или еще не была импортирована, зависимость регистрируется как неимпортированный ассет. Когда ассет будет импортирован позже, Unity реимпортирует все ассеты, которые зависят от него. При настройке зависимости артефакта, используйте GUIDs вместо путей, где это возможно, потому что GUID остается последовательным даже при перемещении или переименовании ассета.
using UnityEngine; using UnityEditor; using UnityEditor.AssetImporters;
class TextureInfo : ScriptableObject { public int height; }
[ScriptedImporter(1, "cube")] public class CubeWithTextureImporter : ScriptedImporter { public override void OnImportAsset(AssetImportContext ctx) { var assetDependency = "Assets/MyTexture.png";
ctx.DependsOnArtifact(assetDependency);
var texture = AssetDatabase.LoadAssetAtPath<Texture>(assetDependency);
if (texture != null) { var textureInfo = ScriptableObject.CreateInstance<TextureInfo>(); textureInfo.height = texture.height; ctx.AddObjectToAsset("TextureInfo", textureInfo); } } }
Используйте LazyLoadReference<T0> для объявления зависимости от артефакта (e.g., AnimationClip). Это гарантирует успешное объявление зависимости, даже если артефакт, на который сделана ссылка, еще не импортирован.
using UnityEditor; using UnityEditor.AssetImporters; using UnityEngine;
public class MyImporter : ScriptedImporter { public LazyLoadReference<AnimationClip> sourceClip; public LazyLoadReference<GameObject> sourcePrefab;
public override void OnImportAsset(AssetImportContext ctx) { var clipPath = AssetDatabase.GetAssetPath(sourceClip.instanceID); ctx.DependsOnArtifact(clipPath);
var prefabPath = AssetDatabase.GetAssetPath(sourcePrefab.instanceID); ctx.DependsOnArtifact(prefabPath);
if (sourceClip.asset != null && sourcePrefab.asset != null) { // Do import stuff.. } } }