Files
Ipseity-Demo/Assets/MeshBaker/Editor/MeshBakerPurgeNullObjects.cs
T
2026-07-03 11:49:25 +02:00

75 lines
2.3 KiB
C#

using UnityEngine;
using UnityEditor;
public static class MeshBakerPurgeNullObjects
{
[MenuItem("Tools/Mesh Baker/Purge Null Objects From Selected Baker")]
public static void PurgeNullObjectsFromSelectedBaker()
{
GameObject selected = Selection.activeGameObject;
if (selected == null)
{
Debug.LogError("Aucun GameObject sélectionné.");
return;
}
Component[] components = selected.GetComponents<Component>();
bool foundList = false;
int totalRemoved = 0;
foreach (Component component in components)
{
if (component == null)
continue;
SerializedObject so = new SerializedObject(component);
// Nom utilisé par Mesh Baker pour la liste Objects To Be Combined
SerializedProperty objectsList = so.FindProperty("objsToMesh");
if (objectsList == null || !objectsList.isArray)
continue;
foundList = true;
int removed = 0;
// Important : on parcourt à l'envers pour supprimer sans décaler les indices restants.
for (int i = objectsList.arraySize - 1; i >= 0; i--)
{
SerializedProperty element = objectsList.GetArrayElementAtIndex(i);
if (element.propertyType == SerializedPropertyType.ObjectReference &&
element.objectReferenceValue == null)
{
objectsList.DeleteArrayElementAtIndex(i);
removed++;
}
}
if (removed > 0)
{
so.ApplyModifiedProperties();
EditorUtility.SetDirty(component);
totalRemoved += removed;
Debug.Log($"Mesh Baker : {removed} entrée(s) null supprimée(s) dans {component.GetType().Name}.");
}
}
if (!foundList)
{
Debug.LogError(
"Aucune liste 'objsToMesh' trouvée sur l'objet sélectionné. " +
"Sélectionne l'objet TextureBaker ou MeshBaker qui contient 'Objects To Be Combined'."
);
return;
}
AssetDatabase.SaveAssets();
Debug.Log($"Purge terminée. Total supprimé : {totalRemoved} entrée(s) null.");
}
}