Unity寻找丢失脚本
发表于2018-11-11
如何寻找丢失脚本,并打印出相应路径,下面就给大家分享一个寻找丢失脚本的脚本工具帮助大家,一起来看看吧。
该脚本放在Editor目录下
思路:对于选择的物体,扫描他及他的所有自物体下面的组件,如果发现某个组件为空(只有可能是脚本丢失),打印出该组件的位置(依附在哪个物体上及该物体的路径)
脚本代码如下:
using UnityEngine; using UnityEditor; public class FindMissingComponents : EditorWindow { //To find missing Components in Scene or prefab //How to use: select the prefab or Gameobjects in Scene which you want to detected whether there are some missing Components //Result: print how many Gameobjects/components have been detected and how many missing components found //Also pring the path of missing component like "GameConsistantData has an empty Component attached in position: 4" static int go_count = 0, components_count = 0, missing_count = 0; [MenuItem("Assets/Tool/FindMissingComponents")] private static void FindMissingComponentInAllSeletedGO() { GameObject[] toDetectedGameObjects = Selection.gameObjects; go_count = 0; components_count = 0; missing_count = 0; foreach (GameObject g in toDetectedGameObjects) { detectGameObject(g); } Debug.Log(string.Format("Searched {0} GameObjects, {1} components, found {2} missing", go_count, components_count, missing_count)); } private static void detectGameObject(GameObject detectedGO) { go_count++; Component[] components = detectedGO.GetComponents<Component>(); for (int index = 0; index < components.Length; index++) { components_count++; if (components[index] == null)//Missing Component { missing_count++; string missingPath = detectedGO.name; Transform t = detectedGO.transform; while (t.parent != null) { missingPath = t.parent.name + "/" + missingPath; t = t.parent; } Debug.Log(missingPath + " has an empty Component attached in position: " + index, detectedGO); } } foreach (Transform childT in detectedGO.transform) //Find in child of detectedGameObject { detectGameObject(childT.gameObject); } } }