Net.Like.Xue.Tokyo/Packages-Local/Net.BITKit.Bounds.Unity/CleanScaleOverrides.cs

53 lines
1.6 KiB
C#
Raw Permalink Normal View History

2025-06-24 23:49:13 +08:00
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();
}
}
}