FixShader.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class FixShader : MonoBehaviour
  5. {
  6. private List<Material> thisMaterial = new List<Material>();
  7. private List<string> shaders = new List<string>();
  8. private void Awake()
  9. {
  10. thisMaterial.Clear();
  11. shaders.Clear();
  12. MeshRenderer[] meshRenderer = GetComponentsInChildren<MeshRenderer>(true);
  13. int length = meshRenderer.Length;
  14. for (int i = 0; i < length; i++)
  15. {
  16. int count = meshRenderer[i].materials.Length;
  17. for (int j = 0; j < count; j++)
  18. {
  19. Material _mater = meshRenderer[i].materials[j];
  20. thisMaterial.Add(_mater);
  21. shaders.Add(_mater.shader.name);
  22. }
  23. }
  24. SkinnedMeshRenderer[] meshSkinRenderer = GetComponentsInChildren<SkinnedMeshRenderer>(true);
  25. length = meshSkinRenderer.Length;
  26. for (int i = 0; i < length; i++)
  27. {
  28. int count = meshSkinRenderer[i].materials.Length;
  29. for (int j = 0; j < count; j++)
  30. {
  31. Material _mater = meshSkinRenderer[i].materials[j];
  32. thisMaterial.Add(_mater);
  33. shaders.Add(_mater.shader.name);
  34. }
  35. }
  36. ParticleSystem[] particleSys = GetComponentsInChildren<ParticleSystem>(true);
  37. length = particleSys.Length;
  38. for (int i = 0; i < length; i++)
  39. {
  40. ParticleSystemRenderer render = particleSys[i].GetComponent<ParticleSystemRenderer>();
  41. int count = render.materials.Length;
  42. for (int j = 0; j < count; j++)
  43. {
  44. Material _mater = render.materials[j];
  45. thisMaterial.Add(_mater);
  46. shaders.Add(_mater.shader.name);
  47. }
  48. }
  49. TrailRenderer[] trailSys = GetComponentsInChildren<TrailRenderer>(true);
  50. length = trailSys.Length;
  51. for (int i = 0; i < length; i++)
  52. {
  53. int count = trailSys[i].materials.Length;
  54. for (int j = 0; j < count; j++)
  55. {
  56. Material _mater = trailSys[i].materials[j];
  57. thisMaterial.Add(_mater);
  58. shaders.Add(_mater.shader.name);
  59. }
  60. }
  61. }
  62. void Start()
  63. {
  64. for (int i = 0; i < thisMaterial.Count; i++)
  65. {
  66. thisMaterial[i].shader = Shader.Find(shaders[i]);
  67. }
  68. }
  69. }