原地址: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. PHP获取本周第一天和最后一天

    //本周的第一天和最后一天  代码如下 复制代码 $date=new DateTime();$date->modify('this week');$first_day_of_week=$date ...

  2. Oracle 硬解析查询

    -- 硬解析的 parse count (hard) select * from v$sysstat where name like '%parse%'; select a.value,b.name ...

  3. 暑假集训(4)第一弹 -----递推(Hdu2039)

    题意梗概:fff团团员小A想退团了,不过要退团,他必须绘制出贤者法阵,以证明他有资格不受大fff之灵的监督 并退团,小A他现在要开始收集材料了,但是,他不清楚应该买多少份材料. 虽然你并不想帮他退团, ...

  4. 算法 replace,replace_copy,back_inserter

    replace (list.begin(), list.end(), , ); // replace any elements with value of 0 by 42 replace算法对输入序列 ...

  5. Contest1065 - 第四届“图灵杯”NEUQ-ACM程序设计竞赛(个人赛)H吃薯条

    题目描述 薯片这次又遇到问题了== 薯片有n个薯条棒,第i个薯条棒的长度为i,由于薯片能瞬间移动,所以薯片能在1秒内从这n个薯条棒里面选择一个或者多个,吃掉同样长的一部分, 并且被吃掉部分的长度是正整 ...

  6. TransparentBlt函数的使用注意事项

    今天客户需要在软件上需要添加一个自己公司的Logo,要求使用镂空透明的形式展现,本来以为很简单的工作没想到在MFC下这么复杂.Logo为BMP格式,白色背景. 以为和在按钮上显示控件差不多,先导入BI ...

  7. Apple MDM Supported configurable settings

    导读:可以通过MDM实现的配置:Apple MDM Supported configurable settings 一.Accounts(账户信息) 1.Exchange ActiveSync(交换a ...

  8. javascript之数据推送

    我们使用ajax与后台服务进行交互,常常是通过触发事件来单次交互,但对于有些web应用来说,需要前台与后台保持长连接,前端不定时地接收后台推送的数据信息, 例如:股票行情分析.聊天室和网页在线游戏等. ...

  9. Cookie和Seesion的区别

    一.Cookie对象: 1.Cookie是由网络服务器发送出来,存在在浏览器上,它是个存储在浏览器目录中的文本文件.当浏览该cookie对应的站点时,cookie作为http头部文件的一部分在浏览器和 ...

  10. hibernate导入大量数据时,为了避免内存中产生大量对象,在编码时注意什么,如何去除?

    Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( i ...