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
Unity3D开发之查找面板上某个脚本(包含Missing)的更多相关文章
- Unity3D开发之查找面板上某个脚本(包括Missing)
原地址:http://blog.csdn.net/lihandsome/article/details/24265411 有时候我们需要知道某个脚本在场景上面哪里用到,或者那个脚本被删除了但又没有把相 ...
- 出售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 ...
- unity3d开发实战《啪啪三国》技术详解!
去年11月,上海火溶网络CEO王伟峰以其第一款3d手游产品<啪啪三国>为例,着重讲解了unity3D手机网游开发的经验,其中涉及了团队组成.人员要求.常见的unity3d开发遇到的坑及解 ...
- 菜鸟在线教你用Unity3D开发VR版的Hello World
大家好,我是菜鸟在线的小编.这篇短文将告诉大家如何用Unity3D开发VR版的Hello World. 1开启SteamVR并连接Vive设备 (a)登录Steam客户端,并点击右上角的VR按钮,这时 ...
- Unity3D开发七惑
使用Unity3D开发也有大半年了,心中存惑如下,愿与各位开发者一起探讨: (1) 远离普适编程之惑 随着游戏引擎的不断发展,游戏程序员的开发层级也越来越高,以unity3d尤为突出.如果是进行We ...
随机推荐
- 线性SVM的推导
线性SVM算法的一般过程 线性SVM的推导 超平面方程 SVM是用来分类的.给定一系列输入数据(n维向量),需要找到一个切分界线(n-1维的超平面),这里假定数据是线性可分的.比如,二维数据的超平面是 ...
- [VBA]批量替换PPT里的字体颜色
不知道为什么计组老师的大量课件字体是伤害视力的亮蓝色……看久了眼睛疼,想把颜色替换成保护视力一点的灰色,但是找了N久也没找到在图形界面上直接操作的方法,于是在MSDN上晃了晃,Google了一下,写了 ...
- [转]基于Protel DXP软件的PCB高级编辑技巧大全
来源:基于Protel DXP软件的PCB高级编辑技巧大全 一.放置坐标指示 放置坐标指示可以显示出PCB板上任何一点的坐标位置. 启用放置坐标的方法如下:从主菜单中执行命令 Place/Coordi ...
- ubuntu访问win10下的磁盘
在ubuntu下访问win10的磁盘时,提示出错. 先用命令查看一下磁盘挂载情况. sudo fdisk -l 会看到一些信息 我要访问的是E盘,也就是 /dev/sda6 这个分区 使用命令ntfx ...
- Educational Codeforces Round 51 (Rated for Div. 2) F - The Shortest Statement 倍增LCA + 最短路
F - The Shortest Statement emmm, 比赛的时候没有想到如何利用非树边. 其实感觉很简单.. 对于一个询问答案分为两部分求: 第一部分:只经过树边,用倍增就能求出来啦. 第 ...
- 查找无序数组中第K大的数
思路: 利用快速排序的划分思想 可以找出前k大数,然后不断划分 直到找到第K大元素 代码: #include <iostream> #include <algorithm> # ...
- 解决CentOS7关闭/开启防火墙出现Unit iptables.service failed to load: No such file or directory.
CentOS7中执行 service iptables start/stop 会报错Failed to start iptables.service: Unit iptables.service fa ...
- vue-music 关于搜索历史本地存储
搜索历史 搜索过的关键词 保存在本地存储 localstorage 中,同时多个组件共享搜索历史数据,将数据存到vuex 中,初始值从本地缓存中取得对应key 的值,没有数据默认为空数组 点击搜索关键 ...
- 谨防“USB杀手”
应对来历不明的U盘要小心,因为可能被植入恶意程序或木马,这点相信许多人都知道. 但近两年又出现了一种新的新威胁,下图是一款名为USB Killer的设备,可对电脑硬件造成物理破坏. 它的使用效果很简单 ...
- 【转载】ARouter-万能路由协议
Github源码地址:https://github.com/alibaba/ARouter 一.功能介绍 支持直接解析标准URL进行跳转,并自动解析参数注入 支持多模块工程使用 支持添加多个拦截器,自 ...