ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[Unity中如何查找脚本挂载在哪个物体上(以2017.2版本为例)](https://blog.csdn.net/weixin_44560436/article/details/86626299) Unity中如何查找脚本挂载在哪个物体上(以2018版本为例) Windows->gennal->Test Runner 2:弹出一个下面这个窗口 ![](https://img.kancloud.cn/bb/39/bb3979632a70530a94dc6fc00cf224aa_471x246.png) 点击上图红框后在project敞口下的Assets目录下自动生成tests文件夹且tests文件夹下又个tests的脚本 [asd](file:///D:/important/2018.4.8c3/Editor/Data/Documentation/en/ScriptReference/EditorWindow.html) ![](https://img.kancloud.cn/ef/50/ef50fff060847c1a5233c5d33edb2ee1_307x34.png) ``` using UnityEngine; using UnityEditor; /// <summary> /// 盛放物体代码 /// </summary> public class FindMissingScriptsRecursively : EditorWindow { static int go_count = 0, components_count = 0, missing_count = 0; [MenuItem("Window / FindMissingScriptsRecursively")] public static void ShowWindow() { EditorWindow.GetWindow(typeof(FindMissingScriptsRecursively)); } public void OnGUI() { if (GUILayout.Button("Find Missing Scripts in selected GameObjects")) { FindInSelected(); } } private static void FindInSelected() { GameObject[] go = Selection.gameObjects; go_count = 0; components_count = 0; missing_count = 0; foreach (GameObject g in go) { FindInGO(g); } Debug.Log(string.Format("Searched {0} GameObjects, {1} components, found {2} missing", go_count, components_count, missing_count)); } private static void FindInGO(GameObject g) { go_count++; Component[] components = g.GetComponents<Component>(); for (int i = 0; i < components.Length; i++) { components_count++; if (components[i] == null) { missing_count++; string s = g.name; Transform t = g.transform; while (t.parent != null) { s = t.parent.name + "/" +s; t = t.parent; } Debug.Log(s + " has an empty script attached in position: " + i, g); } } // Now recurse through each child GO (if there are any): foreach (Transform childT in g.transform) { //Debug.Log("Searching " + childT.name + " " ); FindInGO(childT.gameObject); } } } ``` ``` using UnityEngine; using UnityEditor; using System.Collections.Generic; ///////////////////////////////////////////////////////////////////////////// ///盛放脚本的代码 查找节点及所有子节点中,是否有指定的脚本组件 ///////////////////////////////////////////////////////////////////////////// public class MonoFinder : EditorWindow { Transform root = null; MonoScript scriptObj = null; int loopCount = 0; List<Transform> results = new List<Transform>(); [MenuItem("Seek/Finder/MonoFinder")] //[MenuItem("Level4/Finder/MonoFinder")] static void Init() { EditorWindow.GetWindow(typeof(MonoFinder)); } void OnGUI() { GUILayout.Label("节点:"); root = (Transform)EditorGUILayout.ObjectField(root, typeof(Transform), true); GUILayout.Label("脚本类型:"); scriptObj = (MonoScript)EditorGUILayout.ObjectField(scriptObj, typeof(MonoScript), true); if (GUILayout.Button("Find")) { results.Clear(); loopCount = 0; Debug.Log("开始查找."); FindScript(root); } if (results.Count > 0) { foreach (Transform t in results) { EditorGUILayout.ObjectField(t, typeof(Transform), false); } } else { GUILayout.Label("无数据"); } } void FindScript(Transform root) { if (root != null && scriptObj != null) { loopCount++; Debug.Log(".." + loopCount + ":" + root.gameObject.name); if (root.GetComponent(scriptObj.GetClass()) != null) { results.Add(root); } foreach (Transform t in root) { FindScript(t); } } } } ``` 有了这两个脚本,会发现unity的菜单里会多出一个Seek(如图)的选项,然后点击它,会出现一个弹窗。上面那个节点(如图)就是盛放物体的,下面那个脚本类型(如图)就是放脚本的。 例如下面的案例中,我要查找一个名字叫MainPanel的脚本在Canves这个物体里有多少被挂载了。直接把对应的东西拖进去,然后点击find就会发现在MainPanel这个子物体里有这个脚本。 ![](https://img.kancloud.cn/8b/84/8b8444b3435ae8dc5449937f3ffd7059_552x270.png)