在Unity中,一个材质是唯一的,也就是实例,当我们打开Debug面板时,就可以看清楚材质的具体信息。
其中SvaedProperties就是材质保存的属性,当然贴图也是属性,也就是TexEnvs下的属性
当然,要判断某个材质是否有某张贴图,我们首先需要获得贴图,可以使用以下函数来获得贴图在资源路径下的路径。
private string GetPath(Texture texture)
{
return AssetDatabase.GetAssetPath(texture.GetInstanceID());
}
然后使用下面的方法 ,先获得材质下的所有保存的贴图属性,路径我们可以在Debug面板下Copy,然后再遍历这些属性查找它们是否和我们的贴图一致即可
private bool HasTexture(Material material, string texturePath)
{
if (texturePath != null)
{
SerializedObject serializedMaterial = new SerializedObject(material);
SerializedProperty texturesProperty = serializedMaterial.FindProperty("m_SavedProperties.m_TexEnvs");
for (int i = 0; i < texturesProperty.arraySize; i++)
{
SerializedProperty textureProperty = texturesProperty.GetArrayElementAtIndex(i);
SerializedProperty textureValueProperty = textureProperty.FindPropertyRelative("second.m_Texture");
if (textureValueProperty != null)
{
Texture texture = textureValueProperty.objectReferenceValue as Texture;
if (texture != null && AssetDatabase.GetAssetPath(texture) == texturePath)
{
return true;
}
}
}
}
return false;
}