void OnEnable() { SceneObjectUtility.UpdateGlovalReferenceList(); SceneView.onSceneGUIDelegate -= OnSceneGUI; SceneView.onSceneGUIDelegate += OnSceneGUI; }
void DisappearUnreferenceObjects() { isHiding = true; var refObjectList = new List <ReferenceObject>(); var allObject = SceneObjectUtility.GetAllObjectsInScene(false); foreach (var obj in allObject) { obj.hideFlags = HideFlags.HideInHierarchy; SceneObjectUtility.GetReferenceObject(obj, refObjectList); } refObjectList.Sort((x, y) => { return(x.referenceComponent.GetInstanceID() - y.referenceComponent.GetInstanceID()); }); foreach (var item in refObjectList) { ParentShow(item.referenceComponent.transform); if (item.value == null) { continue; } var obj = SceneObjectUtility.GetGameObject(item.value); if (obj != null) { ParentShow(obj.transform); } } }
void OnHierarchyChange() { if (EditorApplication.isPlaying == false) { SceneObjectUtility.UpdateGlovalReferenceList(); } }
public void ReferenceUpdate() { referenceObjectList.Clear(); foreach (var selection in Selection.gameObjects) { SceneObjectUtility.FindReferenceObject(selection, referenceObjectList); } if (ignoreSelfReference) { foreach (var selection in Selection.gameObjects) { referenceObjectList.RemoveAll(item => item.referenceComponent.gameObject == selection); } } referenceObjectList.RemoveAll(item => (item.value is Component || item.value is GameObject) == false); referenceObjectList.Sort((x, y) => GetObjectID(x.referenceComponent) - GetObjectID(y.referenceComponent)); refCompItems.Clear(); foreach (var referenceObject in referenceObjectList) { if (!refCompItems.Exists(item => item.componentType == referenceObject.referenceComponent.GetType())) { refCompItems.Add(new ReferenceObjectItem() { componentType = referenceObject.referenceComponent.GetType(), isDisplay = true, }); } } }
void FindLayers() { var allObjects = SceneObjectUtility.GetAllObjectsInScene(false); layerWithObjectList.Clear(); int defaultLayer = LayerMask.NameToLayer("Default"); foreach (var obj in allObjects) { if (obj.layer == defaultLayer) { continue; } var layerWithObj = layerWithObjectList.Find((item) => item.layer == obj.layer); if (layerWithObj == null) { layerWithObj = new LayerWithObject() { layer = obj.layer }; layerWithObjectList.Add(layerWithObj); } layerWithObj.objectList.Add(obj); } }
void FindTags() { var allObjects = SceneObjectUtility.GetAllObjectsInScene(false); tagWithObjectList.Clear(); foreach (var obj in allObjects) { if (obj.CompareTag("Untagged")) { continue; } var tagWithObj = tagWithObjectList.Find((item) => item.tag == obj.tag); if (tagWithObj == null) { tagWithObj = new TagWithObjects() { tag = obj.tag }; tagWithObjectList.Add(tagWithObj); } tagWithObj.objectList.Add(obj); } }
void SelectTargetComponent(MonoScript target) { var allObject = SceneObjectUtility.GetAllObjectsInScene(false); var haveComponentObjects = allObject.FindAll(item => item.GetComponent(target.name) != null); Selection.objects = haveComponentObjects.ToArray(); }
void AppearUnreferenceObjects() { isHiding = false; var allObject = SceneObjectUtility.GetAllObjectsInScene(false); foreach (var obj in allObject) { obj.hideFlags = HideFlags.None; } }
public static void UpdatePerahpsReferenceObjectList(MonoBehaviour component, List <PerhapsReferenceObject> list) { // analytics source code. var monoScript = MonoScript.FromMonoBehaviour(component); var uniqueClassList = SceneObjectUtility.SceneUniqueComponentName(); foreach (var text in monoScript.text.Split(';')) { foreach (var methodPattern in getComponentFunctionPattern) { Match m = Regex.Match(text, methodPattern); if (m.Success) { var className = m.Groups ["call"].ToString(); if (!list.Exists(item => item.compType == component.GetType() && item.referenceMonobehaviourName == className)) { var method = new PerhapsReferenceObject() { compType = component.GetType(), referenceMonobehaviourName = className, monoscript = monoScript, }; list.Add(method); uniqueClassList.RemoveAll(item => item.Name == className); } } } foreach (var className in uniqueClassList) { if (component.GetType() == className) { continue; } var result = text.IndexOf(className.Name); if (result != -1 && result != 0) { if (!list.Exists(item => item.compType == component.GetType() && item.referenceMonobehaviourName == className.Name)) { var method = new PerhapsReferenceObject() { compType = component.GetType(), referenceMonobehaviourName = className.Name, monoscript = monoScript, }; list.Add(method); continue; } } } } }
void UpdateAllObject() { allObject = SceneObjectUtility.GetAllObjectsInScene(false); allObject.Sort((x, y) => { return(System.String.Compare(x.name, y.name)); }); if (SceneObjectUtility.SceneReferenceObjects.Length == 0) { SceneObjectUtility.UpdateReferenceList(); } }
public void SceneGuiLineWriter(GameObject selection) { var cameraTransform = SceneView.currentDrawingSceneView.camera.transform; var rotate = cameraTransform.rotation; var cameraPos = cameraTransform.position; Color shadowCol = new Color(0, 0, 0.5f, 0.06f); var enableTypeList = refCompItems.FindAll(item => item.isDisplay == true); var referenceList = referenceObjectList.FindAll(item => SceneObjectUtility.GetGameObject(item.value) == selection); foreach (var refs in referenceList) { if (!enableTypeList.Exists(item => item.componentType == refs.referenceComponent.GetType())) { continue; } var obj = SceneObjectUtility.GetGameObject(refs.referenceComponent); var startPosition = selection.transform.position; var endPosition = obj.transform.position; var size = Vector3.Distance(endPosition, cameraPos) * 0.02f; if (startPosition == endPosition) { continue; } Handles.color = Color.blue; var diffPos = startPosition - endPosition; var tan = new Vector3(diffPos.y, diffPos.x, diffPos.z); var startTan = startPosition; var endTan = endPosition + tan * 0.4f; Handles.CircleCap(1, endPosition, rotate, size); for (int i = 0; i < 3; i++) { Handles.DrawBezier(startPosition, endPosition, startTan, endTan, shadowCol, null, (i + 1) * 5); } Handles.DrawBezier(startPosition, endPosition, startTan, endTan, Color.blue, null, 1); Handles.Label(endPosition, obj.name); } }
void UpdateCameras() { allCameras.Clear(); var allObject = SceneObjectUtility.GetAllObjectsInScene(false); foreach (var obj in allObject) { var camera = obj.GetComponent <Camera>(); if (camera != null) { allCameras.Add(camera); } } SortCamera(); }
void PlayModeChange() { if (EditorApplication.isPaused || EditorApplication.isPlaying == false) { SceneObjectUtility.UpdateGlovalReferenceList(); } if (isHiding == true) { AppearUnreferenceObjects(); DisappearUnreferenceObjects(); } else { DisappearUnreferenceObjects(); AppearUnreferenceObjects(); } }
void OnGUIAllObjectReferenceFrom() { if (!isVisible) { EditorGUILayout.BeginHorizontal("box"); OnGUIIconLabel(fromIcon, new Vector2(16, 16)); EditorGUILayout.LabelField("lost focus"); EditorGUILayout.EndHorizontal(); return; } EditorGUILayout.BeginHorizontal("box"); OnGUIIconLabel(fromIcon, new Vector2(16, 16)); EditorGUILayout.LabelField("ALL reference by"); EditorGUILayout.EndHorizontal(); foreach (var obj in allObject) { var referenceFromTargetObjectList = System.Array.FindAll <ReferenceObject> (SceneObjectUtility.SceneReferenceObjects, item => SceneObjectUtility.GetGameObject(item.value) == obj); if (referenceFromTargetObjectList.Length == 0) { continue; } EditorGUI.indentLevel = 0; EditorGUILayout.BeginVertical("box"); EditorGUILayout.BeginHorizontal(); OnGUIIconLabel(objectIcon, new Vector2(16, 16), GUILayout.Width(18)); EditorGUILayout.ObjectField(obj, typeof(GameObject)); EditorGUILayout.EndHorizontal(); EditorGUI.indentLevel = 1; foreach (var referenceObject in referenceFromTargetObjectList) { EditorGUILayout.BeginHorizontal(); if (referenceObject.referenceComponent is MonoBehaviour) { var monoscript = MonoScript.FromMonoBehaviour((MonoBehaviour)referenceObject.referenceComponent); EditorGUILayout.ObjectField(monoscript, typeof(MonoScript)); } else { EditorGUILayout.LabelField(referenceObject.referenceComponent.GetType().Name); } EditorGUILayout.ObjectField(referenceObject.referenceMemberName, referenceObject.referenceComponent, referenceObject.referenceComponent.GetType()); EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); EditorGUI.indentLevel = 0; } }
static string GameObjectBaseGraph() { List <string> uniqueStrings = new List <string>(); StringBuilder exportText = new StringBuilder(); Dictionary <string, List <ReferenceObject> > itemDirectry = new Dictionary <string, List <ReferenceObject> >(); SceneObjectUtility.UpdateGlovalReferenceList(); exportText.AppendLine("digraph sample {"); exportText.AppendLine("graph [rankdir=\"LR\"]"); exportText.AppendLine("node [ shape = record , style=filled, fillcolor=\"#efefef\",fontname=Helvetica, fontsize=10.5, fontcolor=\"#2b2b2b\", height=0.25, width=1, penwidth=0 ];"); exportText.AppendLine("edge [arrowhead=normal,arrowsize=0.5,len=0.5, color=\"#bfbfbf\"];"); foreach (var obj in SceneObjectUtility.SceneReferenceObjects) { var root = obj.referenceComponent.gameObject.transform.root; if (root.CompareTag("EditorOnly")) { continue; } if (!itemDirectry.ContainsKey(root.name)) { itemDirectry.Add(root.name, new List <ReferenceObject>()); } var list = itemDirectry[root.name]; list.Add(obj); } foreach (var dic in itemDirectry.Keys) { if (dic == null) { continue; } var list = itemDirectry[dic]; list.RemoveAll(item => SceneObjectUtility.GetGameObject(item.value) == item.referenceComponent.gameObject); if (list.Count == 0) { continue; } foreach (var obj in list) { var baseObject = obj.referenceComponent.gameObject; var toObject = SceneObjectUtility.GetGameObject(obj.value); if (toObject == null) { continue; } if (toObject.name.Equals(baseObject.name) && toObject.GetInstanceID() == baseObject.GetInstanceID()) { continue; } string text = string.Format("\"{0}\" -> \"{2}\";", baseObject.name, baseObject.GetInstanceID(), toObject.name, toObject.GetInstanceID()); if (uniqueStrings.Contains(text)) { continue; } exportText.AppendLine(text); uniqueStrings.Add(text); } } exportText.AppendLine("}"); return(exportText.ToString()); }
static string ComponentBaseGraph() { List <string> uniqueStrings = new List <string>(); StringBuilder exportText = new StringBuilder(); Dictionary <string, List <ReferenceObject> > itemDirectry = new Dictionary <string, List <ReferenceObject> >(); List <string> ignoreType = new List <string> { "GameObject", "Transform" }; List <MonoBehaviour> monobehaviourList = new List <MonoBehaviour>(); SceneObjectUtility.UpdateGlovalReferenceList(); exportText.AppendLine("digraph sample {"); exportText.AppendLine("graph [rankdir=\"LR\"]"); exportText.AppendLine("node [ shape = record , style=filled, fillcolor=\"#efefef\",fontname=Helvetica, fontsize=10.5, fontcolor=\"#2b2b2b\", height=0.25, width=1, penwidth=0.1 ];"); exportText.AppendLine("edge [arrowhead=normal,arrowsize=0.5,len=0.5, color=\"#bfbfbf\"];"); foreach (var obj in SceneObjectUtility.GetAllObjectsInScene(false)) { foreach (var comp in obj.GetComponents <MonoBehaviour>()) { monobehaviourList.Add(comp); } } ///------------------- foreach (var obj in SceneObjectUtility.SceneReferenceObjects) { var componentType = obj.referenceComponent.GetType().Name; if (obj.referenceComponent.gameObject.CompareTag("EditorOnly")) { continue; } if (!itemDirectry.ContainsKey(componentType)) { itemDirectry.Add(componentType, new List <ReferenceObject>()); } var list = itemDirectry[componentType]; list.Add(obj); } foreach (var dic in itemDirectry.Keys) { if (dic == null) { continue; } var list = itemDirectry[dic]; list.RemoveAll(item => SceneObjectUtility.GetGameObject(item.value) == item.referenceComponent.gameObject); if (list.Count == 0) { continue; } foreach (var obj in list) { var baseObject = obj.referenceComponent.GetType(); var toObject = obj.value.GetType(); if (toObject == null) { continue; } if (ignoreType.Contains(toObject.Name)) { continue; } string text = string.Format("\"{0}\" -> \"{1}\";", baseObject.Name, toObject.Name); if (uniqueStrings.Contains(text)) { continue; } exportText.AppendLine(text); uniqueStrings.Add(text); } } ///------------------- List <ToReferenceWindow.PerhapsReferenceObject> perhapsList = new List <ToReferenceWindow.PerhapsReferenceObject>(); foreach (var monobehaviour in monobehaviourList) { ToReferenceWindow.UpdatePerahpsReferenceObjectList(monobehaviour, perhapsList); } foreach (var obj in perhapsList) { if (ignoreType.Contains(obj.referenceMonobehaviourName)) { continue; } string text = string.Format("\"{0}\" -> \"{1}\";", obj.compType.Name, obj.referenceMonobehaviourName); if (uniqueStrings.Contains(text)) { continue; } exportText.AppendLine(text); uniqueStrings.Add(text); } ///------------------- List <CallbackCallObject> callbackObjectList = new List <CallbackCallObject>(); foreach (var monobehaviour in monobehaviourList) { foreach (var text in MonoScript.FromMonoBehaviour(monobehaviour).text.Split(';')) { if (SceneObjectUtility.AddMatchMethod(text, monobehaviour, "SendMessage\\((?<call>.*?),.*\\)", callbackObjectList)) { continue; } if (SceneObjectUtility.AddMatchMethod(text, monobehaviour, "SendMessage\\((?<call>.*?)\\)", callbackObjectList)) { continue; } if (SceneObjectUtility.AddMatchMethod(text, monobehaviour, "BroadcastMessage\\((?<call>.*?)\\)", callbackObjectList)) { continue; } if (SceneObjectUtility.AddMatchMethod(text, monobehaviour, "BroadcastMessage\\((?<call>.*?)\\)", callbackObjectList)) { continue; } } } foreach (var callback in callbackObjectList) { foreach (var item in monobehaviourList) { var method = item.GetType().GetMethod(callback.method, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); if (method != null) { foreach (var comp in callback.callComponent) { if (ignoreType.Contains(item.GetType().Name)) { continue; } string text = string.Format("\"{0}\" -> \"{1}\" [style = dotted];", comp.GetType().Name, item.GetType().Name); if (uniqueStrings.Contains(text)) { continue; } exportText.AppendLine(text); uniqueStrings.Add(text); } } } } List <ANimationCallbackObject> animCallbackObjectList = new List <ANimationCallbackObject>(); foreach (var obj in SceneObjectUtility.GetAllObjectsInScene(false)) { if (obj.GetComponent <Animator>() != null) { SceneObjectUtility.GetAnimationEvents(obj.GetComponent <Animator>(), animCallbackObjectList); } } foreach (var callback in animCallbackObjectList) { foreach (var item in monobehaviourList) { var method = item.GetType().GetMethod(callback.method, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); if (method != null) { foreach (var comp in callback.callComponent) { if (ignoreType.Contains(item.GetType().Name)) { continue; } string text = string.Format("\"AnimClip({0})\" -> \"{1}\" [style = dotted];", callback.clip.name, item.GetType().Name); if (uniqueStrings.Contains(text)) { continue; } exportText.AppendLine(text); uniqueStrings.Add(text); } } } } //--------------- List <CallbackObject> co = new List <CallbackObject>(); if (GameObject.FindObjectOfType <Collider2D>() != null) { co.Add(new CallbackObject() { method = "OnCollisionEnter2D", callComponenttype = typeof(Collider2D) }); co.Add(new CallbackObject() { method = "OnCollisionExit2D", callComponenttype = typeof(Collider2D) }); co.Add(new CallbackObject() { method = "OnCollisionStay2D", callComponenttype = typeof(Collider2D) }); co.Add(new CallbackObject() { method = "OnTriggerEnter2D", callComponenttype = typeof(Collider2D) }); co.Add(new CallbackObject() { method = "OnTriggerExit2D", callComponenttype = typeof(Collider2D) }); co.Add(new CallbackObject() { method = "OnTriggerStay2D", callComponenttype = typeof(Collider2D) }); } if (GameObject.FindObjectOfType <Collider>() != null) { co.Add(new CallbackObject() { method = "OnCollisionEnter", callComponenttype = typeof(Collider) }); co.Add(new CallbackObject() { method = "OnCollisionExit", callComponenttype = typeof(Collider) }); co.Add(new CallbackObject() { method = "OnCollisionStay", callComponenttype = typeof(Collider) }); co.Add(new CallbackObject() { method = "OnTriggerEnter", callComponenttype = typeof(Collider) }); co.Add(new CallbackObject() { method = "OnTriggerExit", callComponenttype = typeof(Collider) }); co.Add(new CallbackObject() { method = "OnTriggerStay", callComponenttype = typeof(Collider) }); } if (GameObject.FindObjectOfType <Animator>() != null) { co.Add(new CallbackObject() { method = "OnAnimatorMove", callComponenttype = typeof(Animator) }); } if (GameObject.FindObjectOfType <Camera>() != null) { var type = typeof(Camera); co.Add(new CallbackObject() { method = "OnPostRender", callComponenttype = type }); co.Add(new CallbackObject() { method = "OnPreCull", callComponenttype = type }); co.Add(new CallbackObject() { method = "OnPreRender", callComponenttype = type }); co.Add(new CallbackObject() { method = "OnRenderImage", callComponenttype = type }); co.Add(new CallbackObject() { method = "OnRenderObject", callComponenttype = type }); co.Add(new CallbackObject() { method = "OnWillRenderObject ", callComponenttype = type }); } List <System.Type> uniqueMonobehaviourType = new List <System.Type>(); foreach (var monobehaviour in monobehaviourList) { var type = monobehaviour.GetType(); if (!uniqueMonobehaviourType.Contains(type)) { uniqueMonobehaviourType.Add(type); } } foreach (var callback in co) { foreach (var monobehaviourType in uniqueMonobehaviourType) { var method = monobehaviourType.GetMethod(callback.method, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); if (method != null) { string text = string.Format("\"{0}\" -> \"{1}\" [style = dotted];", callback.callComponenttype.Name, monobehaviourType.Name); if (uniqueStrings.Contains(text)) { continue; } exportText.AppendLine(text); uniqueStrings.Add(text); } } } exportText.AppendLine("}"); return(exportText.ToString()); }
public void OnFocus() { SceneObjectUtility.UpdateReferenceList(); UpdateCalledObjectList(); }
public void OnSelectionChange() { referenceObjectList.Clear(); perhapsReferenceObjectList.Clear(); SceneObjectUtility.UpdateReferenceList(); foreach (var selection in Selection.gameObjects) { SceneObjectUtility.GetReferenceObject(selection, referenceObjectList); if (findWillAccessComponent) { foreach (var component in selection.GetComponents <MonoBehaviour>()) { UpdatePerahpsReferenceObjectList(component, perhapsReferenceObjectList); } } } if (ignoreSelfReference) { foreach (var selection in Selection.gameObjects) { referenceObjectList.RemoveAll(item => SceneObjectUtility.GetGameObject(item.value) == selection); } } refCompItems.Clear(); if (findWillAccessComponent) { foreach (var selection in Selection.gameObjects) { foreach (var component in selection.GetComponents <MonoBehaviour>()) { if (!refCompItems.Exists(item => item.componentType == component.GetType())) { refCompItems.Add(new ReferenceObjectItem() { componentType = component.GetType(), isDisplay = true, }); } } } foreach (var obj in referenceObjectList) { perhapsReferenceObjectList.RemoveAll(item => item.referenceMonobehaviourName == obj.value.GetType().Name); } } else { foreach (var referenceObject in referenceObjectList) { if (!refCompItems.Exists(item => item.componentType == referenceObject.referenceComponent.GetType())) { refCompItems.Add(new ReferenceObjectItem() { componentType = referenceObject.referenceComponent.GetType(), isDisplay = true, }); } } } }
void OnHierarchyChange() { SceneObjectUtility.UpdateGlovalReferenceList(); }
void OnFocus() { SceneObjectUtility.UpdateGlovalReferenceList(); }