Last active
June 12, 2023 14:40
-
-
Save glebov21/cf056e792d3bd9c2fc5973b846efe3d3 to your computer and use it in GitHub Desktop.
Find all missing scripts in unity3d scene
This file contains hidden or 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!"); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment