Ejemplo n.º 1
0
        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));
 }