Unity中如何查找脚本挂载在哪个物体上(以2017.2版本为例)

1:首先
Unity中如何查找脚本挂载在哪个物体上(以2017.2版本为例)_第1张图片
2:弹出一个下面这个窗口
Unity中如何查找脚本挂载在哪个物体上(以2017.2版本为例)_第2张图片
3:在Project面板下自动创建一个Editor文件夹 还有一个脚本
Unity中如何查找脚本挂载在哪个物体上(以2017.2版本为例)_第3张图片
4:在Editor文件夹里要写两个脚本一个是用来***盛放要被找的那些物体***另个是***盛放你要来查找被物体挂载的脚本:***
Unity中如何查找脚本挂载在哪个物体上(以2017.2版本为例)_第4张图片
5:盛放物体代码`
using UnityEngine;
using UnityEditor;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;

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();
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);
}
}

}
6:盛放脚本的代码

using UnityEngine;
using UnityEditor;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using System.Collections.Generic;

public class MonoFinder : EditorWindow
{
Transform root = null;
MonoScript scriptObj = null;
int loopCount = 0;
List results = new List();
[MenuItem(“Seek/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);
}
}
}

}

7:有了这两个脚本,会发现unity的菜单里会多出一个Seek(如图)的选项,然后点击它,会出现一个弹窗。上面那个节点(如图)就是盛放物体的,下面那个脚本类型(如图)就是放脚本的。
例如下面的案例中,我要查找一个名字叫MainPanel的脚本在Canves这个物体里有多少被挂载了。直接把对应的东西拖进去,然后点击find就会发现在MainPanel这个子物体里有这个脚本。
Unity中如何查找脚本挂载在哪个物体上(以2017.2版本为例)_第5张图片

你可能感兴趣的:(Unity中如何查找脚本挂载在哪个物体上(以2017.2版本为例))