Unity3D开发之查找面板上某个脚本(包括Missing)
原地址: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
Unity3D开发之查找面板上某个脚本(包括Missing)的更多相关文章
- Unity3D开发之查找面板上某个脚本(包含Missing)
有时候我们须要知道某个脚本在场景上面哪里用到,或者那个脚本被删除了但又没有把相关游戏场景的关联东西删掉,那样我们就要一个脚本来查找一下了: PS:以下两个脚本都要放到assets/Editor以下哦. ...
- 出售Illustrator脚本插件面板(包含面板源码,以及面板上所有的功能源码)
出售Illustrator脚本插件面板(包含面板源码,以及面板上所有的功能源码) 购买后可提供相应的小修改,以及教你使用往这个多列面里再加上按钮功能! 这套源码可作为工作使用,也可用为新手学习AI脚面 ...
- 跟我从零基础学习Unity3D开发--NGUI入门基础
英雄联盟(撸啊撸) QQ飞车 魔兽世界等等相信大家都玩过游戏吧,玩过那UI知道是什么吧?UI可能说得有点专业的话那么游戏中那些属性面板例如: 现在对UI有一定认识了吧!回想一下您玩过的游戏就一定知道什 ...
- ADO面板上的控件简介
ADO面板上的控件简介 一. TADOConnection组件该组件用于建立数据库的连接.ADO的数据源组件和命令组件可以通过该组件运行命令及数据库中提取数据等.该组件用于建立数据库的连接,该连接可被 ...
- Delphi7 ADO面板上的控件简介
? ADO Connection的主要方法:1) Begin Trans 开始启动一个新的事务,必须保证数据连接处于激活状态.2) Cancel 关闭于数据库的连接.3) Commit T ...
- 添加启动游戏过渡场景Default Splash Scene(Unity3D开发之十三)
添加启动游戏过渡场景Default Splash Scene(Unity3D开发之十三) 猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blo ...
- IE8“开发人员工具”(上)
认识“开发人员工具” 开发人员工具在IE8的工具菜单下,或者直接点击F12快捷键也可以呼叫出来. 提供一系列的小工具,让你可以方便的查找页面的bug,包括html代码.css代码和JavaScript ...
- unity3d开发实战《啪啪三国》技术详解!
去年11月,上海火溶网络CEO王伟峰以其第一款3d手游产品<啪啪三国>为例,着重讲解了unity3D手机网游开发的经验,其中涉及了团队组成.人员要求.常见的unity3d开发遇到的坑及解 ...
- 菜鸟在线教你用Unity3D开发VR版的Hello World
大家好,我是菜鸟在线的小编.这篇短文将告诉大家如何用Unity3D开发VR版的Hello World. 1开启SteamVR并连接Vive设备 (a)登录Steam客户端,并点击右上角的VR按钮,这时 ...
随机推荐
- IOS 下拉菜单
由于之前曾经用到过下拉菜单,所以现在花一些时间回过头来细细整理了一下,逐步完善这个下拉菜单,并提供一些比较基本的功能,以便日后如果有需要的话可以进行复用,并提供给需要的人参考.下拉菜单同样分为数据源和 ...
- vim全局替换
:1,$ s/cmss_//g 1,$代表第一行到最后一行 s代表替换 cmss_为要替换的内容 替换为空格,所以直接// g代表全局替换
- C/C++ union
叙述原因: union data{ int a;double b;}; 对于union,实际中用的并不多,之前也知道怎样计算union的单元(在字对齐的基础上取最大成员所占的内存大小),比如 unio ...
- 找回mysql数据库密码
前提条件:你需要有数据库服务器的权限 1:修改my.ini配置文件 Mysqld:其中的d代表什么? Deamon后台运行的服务程序,增加一行跳过权限验证 2:停止mysql服务运行 3:启动mysq ...
- [WinForm]为TextBox设置水印文字
关键代码: using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace WinF ...
- 【Winform】无法嵌入互操作类型
在使用Interop.SQLDMO进行数据库还原操作时,在vs2010编译时出现:无法嵌入互操作类型“……”,请改用适用的接口的解决方法 解决方案: 选中项目中引入的dll,鼠标右键,选择属性,把“嵌 ...
- JavaScript的语法要点 4 - 面向对象的基础
在传统的面向对象语言如C++.C#.Java中有类.对象.继承等概念.在JavaScript中又如何表示呢?JavaScript中没有class关键字,JavaScript中的类.对象.继承的概念是通 ...
- 处理部分WordPress核心代码或功能,让你的网站更快
处理部分WordPress核心代码或功能,让你的网站更快 http://www.wpdaxue.com/speed-up-wordpress.html
- 抄书(UVa714)
Description Before the invention of book-printing, it was very hard to make a copy of a book. All ...
- 动态LINQ构建(实现等于不等于大于小于,like以及IN)
首先感谢园子里的“红烧狮子头”,他的工作是本文的基础,引文如下http://www.cnblogs.com/daviddai/archive/2013/03/09/2952087.html,本版本实现 ...