UIMeshRenderer.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. [RequireComponent(typeof(CanvasRenderer))]
  6. public class UIMeshRenderer : MonoBehaviour
  7. {
  8. public Mesh mesh;
  9. public Material material;
  10. public Texture texture;
  11. public Color color;
  12. public bool enableMask;
  13. private CanvasRenderer canvasRenderer;
  14. private Material drawMaterial;
  15. void Awake()
  16. {
  17. canvasRenderer = GetComponent<CanvasRenderer>();
  18. canvasRenderer.SetMesh(mesh);
  19. canvasRenderer.SetColor(color);
  20. if (material)
  21. {
  22. drawMaterial = new Material(material);
  23. canvasRenderer.SetMaterial(drawMaterial, texture);
  24. }
  25. }
  26. void OnRenderObject()
  27. {
  28. if (mesh)
  29. DrawMesh();
  30. }
  31. void DrawMesh()
  32. {
  33. canvasRenderer.SetColor(color);
  34. if (enableMask)
  35. {
  36. Mask clipMask = canvasRenderer.GetComponentInParent<Mask>();
  37. if (clipMask && clipMask.enabled)
  38. {
  39. RectTransform maskTrans = clipMask.GetComponent<RectTransform>();
  40. Rect maskRect = maskTrans.rect;
  41. Vector2 mPos = maskTrans.localPosition;
  42. Rect clipRect = new Rect(maskRect.x + mPos.x, maskRect.y + mPos.y, maskRect.width, maskRect.height);
  43. canvasRenderer.EnableRectClipping(maskRect);
  44. }
  45. }
  46. else
  47. {
  48. canvasRenderer.DisableRectClipping();
  49. }
  50. }
  51. public void SetColor(Color color)
  52. {
  53. this.color = color;
  54. }
  55. public void SetUV(string propertyName, Vector4 uv)
  56. {
  57. if (drawMaterial)
  58. {
  59. drawMaterial.SetVector(propertyName, uv);
  60. }
  61. }
  62. public void SetValue(string propertyName, float v)
  63. {
  64. if (drawMaterial)
  65. {
  66. drawMaterial.SetFloat(propertyName, v);
  67. }
  68. }
  69. }