Advertisement
Guest User

Untitled

a guest
May 26th, 2015
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.16 KB | None | 0 0
  1. using System;
  2. using UnityEditor;
  3. using UnityEngine;
  4. using System.Collections.Generic;
  5. using UnityObject = UnityEngine.Object;
  6.  
  7. public static class SelectReferencesUtils {
  8. [MenuItem("Assets/Select Intances On Scene", false, 30)]
  9. static void SelectInstances() {
  10. Selection.objects = GetReferencesOfAsset(Selection.objects);
  11. }
  12.  
  13. [MenuItem("Assets/Select References On Scene", false, 30)]
  14. static void SelectReferences() {
  15. Selection.objects = GetReferencesOfAsset(Selection.objects, false);
  16. }
  17.  
  18. public static UnityObject[] GetReferencesOfAsset(UnityObject asset, bool prefabOnly = true) {
  19. return GetReferencesOfAsset(new [] { asset }, prefabOnly);
  20. }
  21.  
  22. public static UnityObject[] GetReferencesOfAsset(UnityObject[] assets, bool prefabOnly = true) {
  23. if(assets == null || assets.Length == 0)
  24. return new GameObject[0];
  25. var result = new List<UnityObject>();
  26. var allObjects = UnityObject.FindObjectsOfType(typeof(UnityObject)) as UnityObject[];
  27. var allGameObjects = !prefabOnly ? GetChildrenWithInactive(allObjects) : new GameObject[0];
  28. foreach(var target in assets) {
  29. if(target == null)
  30. continue;
  31. if(prefabOnly) {
  32. foreach(var obj in allObjects)
  33. if(PrefabUtility.GetPrefabType(obj) == PrefabType.PrefabInstance && PrefabUtility.GetPrefabParent(obj) == target)
  34. result.Add(obj);
  35. continue;
  36. }
  37. foreach(var gameObject in allGameObjects) {
  38. var added = false;
  39. if(result.Contains(gameObject))
  40. continue;
  41. if(PrefabUtility.GetPrefabType(gameObject) == PrefabType.PrefabInstance && PrefabUtility.GetPrefabParent(gameObject) == target)
  42. result.Add(gameObject);
  43. foreach(var component in gameObject.GetComponents<Component>()) {
  44. if(target == component) {
  45. result.Add(gameObject);
  46. break;
  47. }
  48. var property = new SerializedObject(component).GetIterator();
  49. while(property != null && property.Next(true))
  50. if(property.propertyType == SerializedPropertyType.ObjectReference && property.objectReferenceValue == target) {
  51. result.Add(gameObject);
  52. added = true;
  53. break;
  54. }
  55. if(added)
  56. break;
  57. }
  58. }
  59. }
  60. return result.ToArray();
  61. }
  62.  
  63. public static GameObject[] GetChildrenWithInactive(UnityObject parent) {
  64. return GetChildrenWithInactive(new [] { parent });
  65. }
  66.  
  67. public static GameObject[] GetChildrenWithInactive(IEnumerable<UnityObject> parents) {
  68. if(parents == null)
  69. return new GameObject[0];
  70. var result = new List<GameObject>();
  71. var checkList = new List<UnityObject>(parents);
  72. while(checkList.Count > 0) {
  73. var uncheckedList = new List<UnityObject>();
  74. foreach(var item in checkList) {
  75. var parentGameObject = item as GameObject;
  76. if(parentGameObject == null)
  77. continue;
  78. if(!result.Contains(parentGameObject))
  79. result.Add(parentGameObject);
  80. var childrenComponents = parentGameObject.GetComponentsInChildren(typeof(Component), true);
  81. foreach(var component in childrenComponents) {
  82. var childGameObject = component.gameObject;
  83. if(childGameObject != null && !result.Contains(childGameObject)) {
  84. result.Add(childGameObject);
  85. uncheckedList.Add(childGameObject);
  86. }
  87. }
  88. }
  89. checkList = uncheckedList;
  90. }
  91. return result.ToArray();
  92. }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement