/// <summary> /// Sets all materials on the renderers to copies using fallback shaders /// </summary> /// <param name="renders"></param> internal void SetFallbacks(Renderer[] renders) { foreach (var r in renders) { var serial = new SerializedObject(r); var materials = serial.FindProperty("m_Materials"); for (int i = 0; i < r.sharedMaterials.Length; i++) { var oldMat = r.sharedMaterials[i]; if (AssetDatabaseHelpers.IsBuiltInAsset(oldMat)) { continue; } var newMat = cache.GetCachedCopy(oldMat, out bool _); var fallback = MaterialManager.CreateFallbackMaterial(newMat, Color.white); var mat = materials.GetArrayElementAtIndex(i); mat.objectReferenceValue = newMat; } serial.ApplyModifiedProperties(); AssetDatabase.SaveAssets(); PumkinsAvatarTools.Log($"Set fallback materials for <b>{r.gameObject.name}</b>"); } }