53 lines
1.6 KiB
C#
53 lines
1.6 KiB
C#
|
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();
|
||
|
}
|
||
|
}
|
||
|
}
|