private UnityObjectReferenceChain(IEnumerable <Object> objects) { var hashSet = new HashSet <Object>(); var dictionary = new ReferenceDictionary(); foreach (var @object in objects) { dictionary.AddReference(@object); FindAssetReferencesRecursive(@object, hashSet, dictionary); } Result = dictionary.CreateReadonlyDictionary(); }
private void FindInternal(string baseFolder, bool forceOpenScene = false) { if (!Directory.Exists(baseFolder)) { throw new FatalValidationErrorException(LocalizedMessage.Get("Vket5TargetFinder.PackageFolderNotFound")); } var exhibitorID = Path.GetFileName(baseFolder); var targetScene = OpenPackageScene(exhibitorID); scenes = new Scene[] { targetScene }; var exhibitRootObject = GetExhibitRootObject(exhibitorID, targetScene); rootObjects = new GameObject[] { exhibitRootObject }; allObjects = exhibitRootObject .GetComponentsInChildren <Transform>(true) .Select(tf => tf.gameObject) .ToArray(); ReferenceDictionary = GetContainsAndReferredAssets(baseFolder, allObjects); assetObjects = ReferenceDictionary.Reverse.Keys .Where(asset => AssetDatabase.GetAssetPath(asset).StartsWith("Assets/")) .ToArray(); assetPaths = assetObjects .Select(asset => AssetDatabase.GetAssetPath(asset)) .ToArray(); assetGUIDs = assetPaths .Select(path => AssetDatabase.AssetPathToGUID(path)) .ToArray(); target = new ValidationTarget( baseFolder, assetGUIDs, assetPaths, assetObjects, scenes, rootObjects, allObjects); finded = true; }