原地址:http://blog.csdn.net/lihandsome/article/details/24265411

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

PS:下面两个脚本都要放到assets/Editor下面哦。。

查找missing的脚本:

  1. using UnityEngine;
  2. using UnityEditor;
  3. public class FindMissingScriptsRecursively : EditorWindow
  4. {
  5. static int go_count = 0, components_count = 0, missing_count = 0;
  6. [MenuItem("Window/FindMissingScriptsRecursively")]
  7. public static void ShowWindow()
  8. {
  9. EditorWindow.GetWindow(typeof(FindMissingScriptsRecursively));
  10. }
  11. public void OnGUI()
  12. {
  13. if (GUILayout.Button("Find Missing Scripts in selected GameObjects"))
  14. {
  15. FindInSelected();
  16. }
  17. }
  18. private static void FindInSelected()
  19. {
  20. GameObject[] go = Selection.gameObjects;
  21. go_count = 0;
  22. components_count = 0;
  23. missing_count = 0;
  24. foreach (GameObject g in go)
  25. {
  26. FindInGO(g);
  27. }
  28. Debug.Log(string.Format("Searched {0} GameObjects, {1} components, found {2} missing", go_count, components_count, missing_count));
  29. }
  30. private static void FindInGO(GameObject g)
  31. {
  32. go_count++;
  33. Component[] components = g.GetComponents<Component>();
  34. for (int i = 0; i < components.Length; i++)
  35. {
  36. components_count++;
  37. if (components[i] == null)
  38. {
  39. missing_count++;
  40. string s = g.name;
  41. Transform t = g.transform;
  42. while (t.parent != null)
  43. {
  44. s = t.parent.name +"/"+s;
  45. t = t.parent;
  46. }
  47. Debug.Log (s + " has an empty script attached in position: " + i, g);
  48. }
  49. }
  50. // Now recurse through each child GO (if there are any):
  51. foreach (Transform childT in g.transform)
  52. {
  53. //Debug.Log("Searching " + childT.name  + " " );
  54. FindInGO(childT.gameObject);
  55. }
  56. }
  57. }

查找某个脚本的脚本:

  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEditor;
  5. /////////////////////////////////////////////////////////////////////////////
  6. //查找节点及所有子节点中,是否有指定的脚本组件
  7. /////////////////////////////////////////////////////////////////////////////
  8. public class MonoFinder : EditorWindow {
  9. Transform root = null;
  10. MonoScript scriptObj = null;
  11. int loopCount = 0;
  12. List<Transform> results = new List<Transform>();
  13. [MenuItem("Level4/Finder/MonoFinder")]
  14. static void Init(){
  15. EditorWindow.GetWindow(typeof(MonoFinder));
  16. }
  17. void OnGUI(){
  18. GUILayout.Label("节点:");
  19. root = (Transform)EditorGUILayout.ObjectField(root,typeof(Transform),true);
  20. GUILayout.Label("脚本类型:");
  21. scriptObj = (MonoScript)EditorGUILayout.ObjectField(scriptObj,typeof(MonoScript),true);
  22. if(GUILayout.Button("Find")){
  23. results.Clear();
  24. loopCount = 0;
  25. Debug.Log("开始查找.");
  26. FindScript(root);
  27. }
  28. if(results.Count > 0){
  29. foreach(Transform t in results){
  30. EditorGUILayout.ObjectField(t,typeof(Transform),false);
  31. }
  32. }else{
  33. GUILayout.Label("无数据");
  34. }
  35. }
  36. void FindScript(Transform root){
  37. if(root != null && scriptObj != null){
  38. loopCount ++;
  39. Debug.Log(".."+loopCount+":"+root.gameObject.name);
  40. if( root.GetComponent(scriptObj.GetClass()) != null){
  41. results.Add(root);
  42. }
  43. foreach(Transform t in root){
  44. FindScript(t);
  45. }
  46. }
  47. }
  48. }

相关的链接:

http://wiki.unity3d.com/index.php?title=FindMissingScripts

http://superherosk123.iteye.com/blog/1632627

Unity3D开发之查找面板上某个脚本(包括Missing)的更多相关文章

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

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

  2. 出售Illustrator脚本插件面板(包含面板源码,以及面板上所有的功能源码)

    出售Illustrator脚本插件面板(包含面板源码,以及面板上所有的功能源码) 购买后可提供相应的小修改,以及教你使用往这个多列面里再加上按钮功能! 这套源码可作为工作使用,也可用为新手学习AI脚面 ...

  3. 跟我从零基础学习Unity3D开发--NGUI入门基础

    英雄联盟(撸啊撸) QQ飞车 魔兽世界等等相信大家都玩过游戏吧,玩过那UI知道是什么吧?UI可能说得有点专业的话那么游戏中那些属性面板例如: 现在对UI有一定认识了吧!回想一下您玩过的游戏就一定知道什 ...

  4. ADO面板上的控件简介

    ADO面板上的控件简介 一. TADOConnection组件该组件用于建立数据库的连接.ADO的数据源组件和命令组件可以通过该组件运行命令及数据库中提取数据等.该组件用于建立数据库的连接,该连接可被 ...

  5. Delphi7 ADO面板上的控件简介

    ? ADO Connection的主要方法:1) Begin Trans    开始启动一个新的事务,必须保证数据连接处于激活状态.2) Cancel    关闭于数据库的连接.3) Commit T ...

  6. 添加启动游戏过渡场景Default Splash Scene(Unity3D开发之十三)

    添加启动游戏过渡场景Default Splash Scene(Unity3D开发之十三) 猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blo ...

  7. IE8“开发人员工具”(上)

    认识“开发人员工具” 开发人员工具在IE8的工具菜单下,或者直接点击F12快捷键也可以呼叫出来. 提供一系列的小工具,让你可以方便的查找页面的bug,包括html代码.css代码和JavaScript ...

  8. unity3d开发实战《啪啪三国》技术详解!

     去年11月,上海火溶网络CEO王伟峰以其第一款3d手游产品<啪啪三国>为例,着重讲解了unity3D手机网游开发的经验,其中涉及了团队组成.人员要求.常见的unity3d开发遇到的坑及解 ...

  9. 菜鸟在线教你用Unity3D开发VR版的Hello World

    大家好,我是菜鸟在线的小编.这篇短文将告诉大家如何用Unity3D开发VR版的Hello World. 1开启SteamVR并连接Vive设备 (a)登录Steam客户端,并点击右上角的VR按钮,这时 ...

随机推荐

  1. SQL Server 错误行号

    https://msdn.microsoft.com/zh-cn/library/ms178600.aspx 返回发生错误的行号,该错误导致运行 TRY…CATCH 构造的 CATCH 块. 语法 E ...

  2. 我眼中的go的语法特点

    因为基本从c#/javascript/c/c++/python/lua/action script,一路走来,对所有的C系列的语法既熟悉又有好感: 那在看语言的时候肯定会与C系列的东西进行类比,那就总 ...

  3. Manifest文件简介

    每个Android项目都包含一个Manifest文件-Android Manifest.xml,它存储在项目层次中的最底层.Manifest可以定义应用程序及其组件和需求的结构和元数据. 它包含了组成 ...

  4. Bootstrap学习笔记(二) 表单

    在Bootstrap学习笔记(一) 排版的基础上继续学习Bootstrap的表单,编辑器及head内代码不变. 3-1 基础表单 单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文 ...

  5. Java权限讲解

    Java访问权限就如同类和对象一样,在Java程序中随处可见. Java的访问权限,根据权限范围从大到小为:public > protected > package > privat ...

  6. java中的synchronized关键字

    参考:http://www.cnblogs.com/devinzhang/archive/2011/12/14/2287675.html 多线程并发问题的根因: 在一个对象中有一个变量i=0,有两个线 ...

  7. 谷歌浏览器支持小于12px的字体

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. DataGridView 分页显示

    DataGridView 分页显示函数 1.获取当前页的子数据表函数 public static DataTable GetPagedTable(DataTable dt, int PageIndex ...

  9. C#基础及记忆概念

    在C#中,你给一个方法传输值类型参数时,实际上是使用的这个参数的一个副本,就是将原来的变量复制一份,然后传给一个方法,让其进行操作.所以在方法内部对参数的修改等不会对原来的参数造成影响(这个其实就是值 ...

  10. ASP.NET如何获取根目录的方法汇总

    编写程序的时候,经常需要用的项目根目录,自己总结如下: 1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 方法 ...