Skip to content

Instantly share code, notes, and snippets.

@AkhmadMax
Created July 31, 2013 12:48
Show Gist options
  • Save AkhmadMax/6121694 to your computer and use it in GitHub Desktop.
Save AkhmadMax/6121694 to your computer and use it in GitHub Desktop.
Allows you to add a search a Unity project for all instances of missing mono script.
using UnityEngine;
using UnityEditor;
public class FindMissingScripts : EditorWindow {
[MenuItem("Window/FindMissingScripts")]
public static void ShowWindow()
{
EditorWindow.GetWindow(typeof(FindMissingScripts));
}
public void OnGUI()
{
if (GUILayout.Button("Find Missing Scripts in selected prefabs"))
{
FindInSelected();
}
}
private static void FindInSelected()
{
GameObject[] go = Selection.gameObjects;
int go_count = 0, components_count = 0, missing_count = 0;
foreach (GameObject g in go)
{
go_count++;
Component[] components = g.GetComponents<Component>();
for (int i = 0; i < components.Length; i++)
{
components_count++;
if (components[i] == null)
{
missing_count++;
Debug.Log(g.name + " has an empty script attached in position: " + i, g);
}
}
}
Debug.Log(string.Format("Searched {0} GameObjects, {1} components, found {2} missing", go_count, components_count, missing_count));
}
}
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++;
Debug.Log(g.name + " 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);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment