FixMaterials.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using TriLibCore.Mappers;
  2. using UnityEngine;
  3. namespace TriLibCore.Samples
  4. {
  5. /// <summary>
  6. /// Represents a class used to fix TriLib sample models depending on the rendering pipeline.
  7. /// </summary>
  8. public class FixMaterials : MonoBehaviour
  9. {
  10. private void Start()
  11. {
  12. MaterialMapper materialMapper = null;
  13. for (var i = 0; i < MaterialMapper.RegisteredMappers.Count; i++)
  14. {
  15. var materialMapperName = MaterialMapper.RegisteredMappers[i];
  16. if (TriLibSettings.GetBool(materialMapperName))
  17. {
  18. try
  19. {
  20. materialMapper = ScriptableObject.CreateInstance(materialMapperName) as MaterialMapper;
  21. }
  22. catch
  23. {
  24. materialMapper = null;
  25. }
  26. break;
  27. }
  28. }
  29. if (materialMapper == null)
  30. {
  31. return;
  32. }
  33. var meshRenderers = GetComponentsInChildren<MeshRenderer>();
  34. for (var j = 0; j < meshRenderers.Length; j++)
  35. {
  36. var meshRenderer = meshRenderers[j];
  37. var materials = meshRenderer.materials;
  38. for (var i = 0; i < materials.Length; i++)
  39. {
  40. var color = meshRenderer.sharedMaterials[i].color;
  41. materials[i] = Instantiate(materialMapper.MaterialPreset);
  42. materials[i].color = color;
  43. }
  44. meshRenderer.materials = materials;
  45. }
  46. var skinnedMeshRenderers = GetComponentsInChildren<SkinnedMeshRenderer>();
  47. for (var j = 0; j < skinnedMeshRenderers.Length; j++)
  48. {
  49. var skinnedMeshRenderer = skinnedMeshRenderers[j];
  50. var materials = skinnedMeshRenderer.materials;
  51. for (var i = 0; i < materials.Length; i++)
  52. {
  53. var color = skinnedMeshRenderer.sharedMaterials[i].color;
  54. materials[i] = Instantiate(materialMapper.MaterialPreset);
  55. materials[i].color = color;
  56. }
  57. skinnedMeshRenderer.materials = materials;
  58. }
  59. Destroy(materialMapper);
  60. }
  61. }
  62. }