Sin descripción
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ShaderGraphMaterialsUpdater.cs 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using Unity.Rendering.Universal;
  2. using UnityEditor.ShaderGraph;
  3. using UnityEngine;
  4. namespace UnityEditor.Rendering.Universal
  5. {
  6. class UniversalShaderGraphSaveContext
  7. {
  8. public bool updateMaterials;
  9. }
  10. [InitializeOnLoad]
  11. class ShaderGraphMaterialsUpdater
  12. {
  13. static ShaderGraphMaterialsUpdater()
  14. {
  15. GraphData.onSaveGraph += OnShaderGraphSaved;
  16. }
  17. static void OnShaderGraphSaved(Shader shader, object saveContext)
  18. {
  19. // In case the shader is not Universal
  20. if (!(saveContext is UniversalShaderGraphSaveContext universalSaveContext))
  21. return;
  22. if (!universalSaveContext.updateMaterials)
  23. return;
  24. // Iterate over all loaded Materials
  25. Material[] materials = Resources.FindObjectsOfTypeAll<Material>();
  26. try
  27. {
  28. for (int i = 0, length = materials.Length; i < length; i++)
  29. {
  30. // Only update progress bar every 10 materials
  31. if (i % 10 == 9)
  32. {
  33. EditorUtility.DisplayProgressBar(
  34. "Checking material dependencies...",
  35. $"{i} / {length} materials.",
  36. i / (float)(length - 1));
  37. }
  38. // Reset keywords
  39. if (materials[i].shader.name == shader.name)
  40. ShaderUtils.UpdateMaterial(materials[i], ShaderUtils.MaterialUpdateType.ModifiedShader);
  41. }
  42. }
  43. finally
  44. {
  45. EditorUtility.ClearProgressBar();
  46. }
  47. }
  48. }
  49. }