UnityEditor juge si la texture du matériau est manquante

Nous savons tous que dans Unity, lorsqu'une ressource référencée est supprimée, elle ne deviendra pas None pour le référent, mais Missing.

Ci-dessous, nous discutons de la situation des textures manquantes sur les matériaux.

Sur l'interface de l'inspecteur, il n'est pas visible directement. Vous devez passer en mode débogage pour voir :
insérez la description de l'image ici
insérez la description de l'image ici

Maintenant, nous voulons juger cette situation du point de vue du code.

Parlons d'abord du principe. La référence de la ressource se fait via un InstanceID. Lorsque la ressource est supprimée, la référence du référent à l'ID est toujours conservée. Par conséquent, lorsque " la référence de la ressource est nulle" et que "l'ID n'est pas vide" , il peut être jugé Il est dans l'état manquant.

Remarque : La version utilisée dans le contenu suivant est Unity2019.3

Material mat = 你的材质;
var serializedObject = new SerializedObject(mat);

var savedProperties = serializedObject.FindProperty("m_SavedProperties.m_TexEnvs");
if (savedProperties == null || !savedProperties.isArray)
    continue;

for (var i = savedProperties.arraySize; --i >= 0;)
{
    
    
    var propertyArray = savedProperties.GetArrayElementAtIndex(i);
    var prop = propertyArray.FindPropertyRelative("second.m_Texture");
    var id = prop.objectReferenceInstanceIDValue; // 这里得到 InstanceID
    var tex = prop.objectReferenceValue;

    if (tex == null && id != 0)
        Debug.LogError("材质贴图Missing");
}

De la même manière, cette méthode peut être appliquée à d'autres types de Manquants.


Ajoutez une petite astuce, comment obtenir " m_SavedProperties.m_TexEnvs " et " second.m_Texture " comme ici ?
Dans l'interface de l'inspecteur en mode débogage, maintenez la touche enfoncée Altpour tout voir d'un coup d'œil.

insérez la description de l'image ici

Supongo que te gusta

Origin blog.csdn.net/EdmundRF/article/details/131111533
Recomendado
Clasificación