SkeletonUtilitySubmeshRenderer.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using UnityEngine;
  2. using System.Collections;
  3. [ExecuteInEditMode]
  4. public class SkeletonUtilitySubmeshRenderer : MonoBehaviour
  5. {
  6. [System.NonSerialized]
  7. public Mesh mesh;
  8. public int submeshIndex = 0;
  9. public Material hiddenPassMaterial;
  10. Renderer cachedRenderer;
  11. MeshFilter filter;
  12. Material[] sharedMaterials;
  13. void Awake()
  14. {
  15. cachedRenderer = GetComponent<Renderer>();
  16. filter = GetComponent<MeshFilter>();
  17. sharedMaterials = new Material[0];
  18. }
  19. public void SetMesh(Renderer parentRenderer, Mesh mesh, Material mat)
  20. {
  21. if (cachedRenderer == null)
  22. return;
  23. cachedRenderer.enabled = true;
  24. filter.sharedMesh = mesh;
  25. if (cachedRenderer.sharedMaterials.Length != parentRenderer.sharedMaterials.Length)
  26. {
  27. sharedMaterials = parentRenderer.sharedMaterials;
  28. }
  29. for (int i = 0; i < sharedMaterials.Length; i++)
  30. {
  31. if (i == submeshIndex)
  32. sharedMaterials[i] = mat;
  33. else
  34. sharedMaterials[i] = hiddenPassMaterial;
  35. }
  36. cachedRenderer.sharedMaterials = sharedMaterials;
  37. }
  38. }