原地址:http://blog.csdn.net/lihandsome/article/details/24265411
有时候我们需要知道某个脚本在场景上面哪里用到,或者那个脚本被删除了但又没有把相关游戏场景的关联东西删掉,那样我们就要一个脚本来查找一下了:
PS:下面两个脚本都要放到assets/Editor下面哦。。
查找missing的脚本:
- using UnityEngine;
- using UnityEditor;
- 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 System.Collections;
- using System.Collections.Generic;
- using UnityEditor;
- /////////////////////////////////////////////////////////////////////////////
- //查找节点及所有子节点中,是否有指定的脚本组件
- /////////////////////////////////////////////////////////////////////////////
- public class MonoFinder : EditorWindow {
- Transform root = null;
- MonoScript scriptObj = null;
- int loopCount = 0;
- List<Transform> results = new List<Transform>();
- [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);
- }
- }
- }
- }
相关的链接:
http://wiki.unity3d.com/index.php?title=FindMissingScripts
http://superherosk123.iteye.com/blog/1632627