Forked from glebov21/SelectGameObjectsWithMissingScripts.cs
Created
June 18, 2019 08:31
-
-
Save isaveu/e2057f397f26df882b5b6e3d94556230 to your computer and use it in GitHub Desktop.
Find all missing scripts in unity3d scene
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using UnityEditor; | |
using System.Collections.Generic; | |
using UnityEngine.SceneManagement; //3 | |
public class SelectGameObjectsWithMissingScripts : Editor | |
{ | |
[MenuItem("Tools/WPAG Utilities/Select GameObjects With Missing Scripts")] | |
static void SelectGameObjects() | |
{ | |
//Get the current scene and all top-level GameObjects in the scene hierarchy | |
Scene currentScene = SceneManager.GetActiveScene(); | |
GameObject[] rootObjects = currentScene.GetRootGameObjects(); | |
List<Object> objectsWithDeadLinks = new List<Object>(); | |
foreach (GameObject g in rootObjects) | |
{ | |
//Get all components on the GameObject, then loop through them | |
Component[] components = g.GetComponents<Component>(); | |
for (int i = 0; i < components.Length; i++) | |
{ | |
Component currentComponent = components[i]; | |
//If the component is null, that means it's a missing script! | |
if (currentComponent == null) | |
{ | |
//Add the sinner to our naughty-list | |
objectsWithDeadLinks.Add(g); | |
Selection.activeGameObject = g; | |
Debug.Log(g + " has a missing script!"); | |
break; | |
} | |
} | |
} | |
if (objectsWithDeadLinks.Count > 0) | |
{ | |
//Set the selection in the editor | |
Selection.objects = objectsWithDeadLinks.ToArray(); | |
} | |
else | |
{ | |
Debug.Log("No GameObjects in '" + currentScene.name + "' have missing scripts! Yay!"); | |
} | |
} | |
} |
I wanted to make it work but I ended up using https://assetstore.unity.com/packages/tools/game-toolkits/missing-reference-finder-257205
Absolute garbage
#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using UnityEngine.SceneManagement; //3
public class SelectGameObjectsWithMissingScripts : Editor
{
[MenuItem("Tools/WPAG Utilities/Select GameObjects With Missing Scripts")]
static void SelectGameObjects()
{
List allObjects = new List();
foreach (GameObject obj in UnityEngine.Object.FindObjectsOfType(true))
{
allObjects.Add(obj);
}
List<Object> objectsWithDeadLinks = new List<Object>();
foreach (GameObject g in allObjects)
{
Component[] components = g.GetComponents<Component>();
for (int i = 0; i < components.Length; i++)
{
Component currentComponent = components[i];
if (currentComponent == null)
{
objectsWithDeadLinks.Add(g);
Debug.Log(g + " - Find Fucking issue object", g);
}
}
}
if (objectsWithDeadLinks.Count > 0)
{
}
else
{
Debug.Log("Not Found");
}
}
}
#endif
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Doing that works to find missing scripts but the selection breaks (it selects the parent (which can be very high in the hierarchy) and not the gameobject with missing script)