public IEnumerable <ReferenceFile> FindReferences(Object targetObj) { Assert.IsNotNull(targetObj, "Target object is null"); var targetPath = AssetDatabase.GetAssetPath(targetObj); var targetObjects = (AssetDatabase.IsSubAsset(targetObj) || targetObj is SceneAsset) ? new[] { targetObj } : AssetDatabase.LoadAllAssetsAtPath(targetPath); var fileRefs = AssetDatabase.GetAllAssetPaths() .Where(path => path != targetPath) .Where(path => _cache.GetDependencies(path).Contains(targetPath)) .Select(path => new ReferenceFile { ReferenceFilePath = path, }) .ToArray(); var countResourceRefs = 0; foreach (var resourceRef in fileRefs .Where(r => !UnityApi.IsSceneFile(r.ReferenceFilePath))) { countResourceRefs++; var realResRef = RefApi.GetReference(resourceRef.ReferenceFilePath, GetFilter(targetObjects)); if (realResRef != null) { yield return(realResRef); } } if (fileRefs.Length == countResourceRefs) { yield break; } var targetComponentsOrObject = targetObj is GameObject go ? go.GetComponents <Component>().Append(targetObj).ToArray() : new[] { targetObj }; var sceneRefs = fileRefs .Where(r => UnityApi.IsSceneFile(r.ReferenceFilePath)) .Select(sceneRef => RefApi.GetReference(sceneRef.ReferenceFilePath, GetFilter(targetComponentsOrObject))) .Where(sceneRef => sceneRef != null); foreach (var sceneRef in sceneRefs) { yield return(sceneRef); } }
public static ReferenceFile FindMissingReferenceFiles(string path) { return(RefApi.GetReference(path, IsMissingProperty, true)); }