using UnityEngine; using UnityEngine.UI; using System.Collections; using System.Collections.Generic; [RequireComponent(typeof(CanvasRenderer))] public class UIMeshRenderer : MonoBehaviour { public Mesh mesh; public Material material; public Texture texture; public Color color; public bool enableMask; private CanvasRenderer canvasRenderer; private Material drawMaterial; void Awake() { canvasRenderer = GetComponent(); canvasRenderer.SetMesh(mesh); canvasRenderer.SetColor(color); if (material) { drawMaterial = new Material(material); canvasRenderer.SetMaterial(drawMaterial, texture); } } void OnRenderObject() { if (mesh) DrawMesh(); } void DrawMesh() { canvasRenderer.SetColor(color); if (enableMask) { Mask clipMask = canvasRenderer.GetComponentInParent(); if (clipMask && clipMask.enabled) { RectTransform maskTrans = clipMask.GetComponent(); Rect maskRect = maskTrans.rect; Vector2 mPos = maskTrans.localPosition; Rect clipRect = new Rect(maskRect.x + mPos.x, maskRect.y + mPos.y, maskRect.width, maskRect.height); canvasRenderer.EnableRectClipping(maskRect); } } else { canvasRenderer.DisableRectClipping(); } } public void SetColor(Color color) { this.color = color; } public void SetUV(string propertyName, Vector4 uv) { if (drawMaterial) { drawMaterial.SetVector(propertyName, uv); } } public void SetValue(string propertyName, float v) { if (drawMaterial) { drawMaterial.SetFloat(propertyName, v); } } }