using UnityEditor; using UnityEngine; using UnityEngine.SceneManagement; public class CleanScaleOverrides { [MenuItem("Tools/Clean Scale Overrides In Scene")] public static void CleanOverridesInScene() { for (var i = 0; i < SceneManager.sceneCount; i++) { var scene = SceneManager.GetSceneAt(i); foreach (var gameObject in scene.GetRootGameObjects()) { Recursion(gameObject); continue; void Recursion(GameObject go) { CleanOverrides(go); for (var j = 0; j < go.transform.childCount; j++) { Recursion(go.transform.GetChild(j).gameObject); } } } } } [MenuItem("Tools/Clean Scale Overrides In Selection")] public static void CleanOverridesInSelection() { foreach (var go in Selection.gameObjects) { CleanOverrides(go); } } private static void CleanOverrides(GameObject go) { var prefabType = PrefabUtility.GetPrefabInstanceStatus(go); if (prefabType == PrefabInstanceStatus.Connected) { var scaleProperty = new SerializedObject(go.transform).FindProperty("m_LocalScale"); if (Vector3.Distance(scaleProperty.vector3Value,Vector3.one)<0.01f) { PrefabUtility.RevertPropertyOverride(scaleProperty, InteractionMode.UserAction); } scaleProperty.Dispose(); } } }