• Unity3D开发之查找面板上某个脚本(包含Missing)


    有时候我们须要知道某个脚本在场景上面哪里用到,或者那个脚本被删除了但又没有把相关游戏场景的关联东西删掉,那样我们就要一个脚本来查找一下了:

    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

  • 相关阅读:
    浅谈左偏树入门
    【洛谷3768】简单的数学题(莫比乌斯反演+杜教筛)
    【51nod1743】雪之国度(最小生成树+倍增)
    【BZOJ1562】[NOI2009] 变换序列(匈牙利算法)
    【HHHOJ】NOIP模拟赛 玖 解题报告
    【BZOJ3930】[CQOI2015] 选数(容斥)
    【BZOJ1257】[CQOI2007] 余数之和(除法分块)
    杜教筛入门
    初学狄利克雷卷积
    关于积性函数的一些知识
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/3998459.html
Copyright © 2020-2023  润新知