test : opti
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
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.");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user