1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 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>();
- 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<Mask>();
- if (clipMask && clipMask.enabled)
- {
- RectTransform maskTrans = clipMask.GetComponent<RectTransform>();
- 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);
- }
- }
- }
|