| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 | 
							- using System;
 
- using System.Collections;
 
- using System.Collections.Generic;
 
- using UnityEngine;
 
- using UnityEngine.Pool;
 
- using UnityEngine.Rendering;
 
- using UnityEngine.UI;
 
- using Utility;
 
- [ExecuteInEditMode]
 
- [RequireComponent(typeof(RectTransform))]
 
- [RequireComponent(typeof(CanvasRenderer))]
 
- public class UIObject : MaskableGraphic, IMeshModifier
 
- {
 
-     public static Map<Shader, List<string>> allShaderName = new Map<Shader, List<string>>();
 
-     private MaterialPropertyBlock MaterialPropertyBlock;
 
-     public Material _material;
 
-     public Mesh _Mesh;
 
-     public bool isNewMaterial;
 
-     private Renderer _renderer;
 
-     public Camera Camera;
 
-     // public
 
-     public override Material defaultMaterial
 
-     {
 
-         get { return _material; }
 
-     }
 
-     protected override void OnEnable()
 
-     {
 
-         canvasRenderer.Clear();
 
-         base.OnEnable();
 
-     }
 
-     protected override void OnDisable()
 
-     {
 
-         canvasRenderer.Clear();
 
-         base.OnDisable();
 
-     }
 
-     protected override void Awake()
 
-     {
 
-         base.Awake();
 
-         _renderer = gameObject.GetComponent<Renderer>();
 
-         if (_renderer == null)
 
-         {
 
-             return;
 
-         }
 
-         _renderer.enabled = false;
 
-         if (isNewMaterial)
 
-         {
 
-             _material = new Material(_renderer.sharedMaterial);
 
-         }
 
-         else
 
-         {
 
-             _material = _renderer.sharedMaterial;
 
-         }
 
-       
 
-         // _material.shader.p
 
-         _Mesh = gameObject.GetComponent<MeshFilter>().sharedMesh;
 
-         if (_Mesh != null)
 
-         {
 
-             List<Vector3> nor = new List<Vector3>();
 
-             for (int i = 0; i < _Mesh.colors.Length; i++)
 
-             {
 
-                 nor.Add(new Vector3(_Mesh.colors[i].r, _Mesh.colors[i].g, 0));
 
-             }
 
-             _Mesh.normals = nor.ToArray();
 
-         }
 
-     }
 
-     public override void Rebuild(CanvasUpdate update)
 
-     {
 
-         base.Rebuild(update);
 
-         if (update == CanvasUpdate.PreRender)
 
-         {
 
-         }
 
-     }
 
-     private void Update()
 
-     {
 
-         if (_material == null)
 
-         {
 
-             return;
 
-         }
 
-         if (MaterialPropertyBlock == null)
 
-         {
 
-             MaterialPropertyBlock = new MaterialPropertyBlock();
 
-         }
 
-         _renderer.GetPropertyBlock(MaterialPropertyBlock);
 
-         Shader shader = _material.shader;
 
-         if (!allShaderName.TryGetValue(shader, out List<string> keyName))
 
-         {
 
-             keyName = new List<string>();
 
-             for (int i = 0; i < _material.shader.GetPropertyCount(); i++)
 
-             {
 
-                 string name = _material.shader.GetPropertyName(i);
 
-                 keyName.Add(name);
 
-             }
 
-             allShaderName.Add(shader, keyName);
 
-         }
 
-         for (int i = 0; i < keyName.Count; i++)
 
-         {
 
-             string name = keyName[i];
 
-             if (name != null && MaterialPropertyBlock.HasProperty(name))
 
-             {
 
-                 if (_material.shader.GetPropertyType(i) == ShaderPropertyType.Color)
 
-                 {
 
-                     _material.SetColor(name, MaterialPropertyBlock.GetColor(name));
 
-                 }
 
-                 if (_material.shader.GetPropertyType(i) == ShaderPropertyType.Float)
 
-                 {
 
-                     _material.SetFloat(name, MaterialPropertyBlock.GetFloat(name));
 
-                 }
 
-                 if (_material.shader.GetPropertyType(i) == ShaderPropertyType.Range)
 
-                 {
 
-                     _material.SetFloat(name, MaterialPropertyBlock.GetFloat(name));
 
-                 }
 
-                 if (_material.shader.GetPropertyType(i) == ShaderPropertyType.Vector)
 
-                 {
 
-                     _material.SetVector(name, MaterialPropertyBlock.GetVector(name));
 
-                 }
 
-                 if (_material.shader.GetPropertyType(i) == ShaderPropertyType.Int)
 
-                 {
 
-                     _material.SetInt(name, MaterialPropertyBlock.GetInt(name));
 
-                 }
 
-                 if (_material.shader.GetPropertyType(i) == ShaderPropertyType.Texture)
 
-                 {
 
-                     _material.SetTexture(name, MaterialPropertyBlock.GetTexture(name));
 
-                 }
 
-             }
 
-         }
 
-     }
 
-     protected override void UpdateMaterial()
 
-     {
 
-         if (!IsActive())
 
-             return;
 
-         canvasRenderer.materialCount = 1;
 
-         canvasRenderer.SetMaterial(materialForRendering, 0);
 
-     }
 
-     [ContextMenu("刷新mesh")]
 
-     public void ShuaXing()
 
-     {
 
-         // _Mesh = gameObject.GetComponent<MeshFilter>().sharedMesh;
 
-         SetAllDirty();
 
-     }
 
-     protected override void OnPopulateMesh(VertexHelper vh)
 
-     {
 
-         base.OnPopulateMesh(vh);
 
-     }
 
-     private bool isAlater = false;
 
-     protected override void UpdateGeometry()
 
-     {
 
-         // if (rectTransform != null )
 
-         //     OnPopulateMesh(s_VertexHelper);
 
-         //
 
-         //
 
-         // var components = ListPool<Component>.Get();
 
-         // GetComponents(typeof(IMeshModifier), components);
 
-         //    
 
-         // for (var i = 0; i < components.Count; i++)
 
-         //     ((IMeshModifier)components[i]).ModifyMesh(s_VertexHelper);
 
-         //
 
-         // ListPool<Component>.Release(components);
 
-         //
 
-         // s_VertexHelper.FillMesh(workerMesh);
 
-         // canvasRenderer.SetMesh(workerMesh);
 
-         // if (isAlater)
 
-         // {
 
-         //     return;
 
-         // }
 
-         //
 
-         // isAlater = true;
 
-         if (_renderer is LineRenderer)
 
-         {
 
-             LineRenderer lineRenderer = _renderer as LineRenderer;
 
-             _Mesh = new Mesh();
 
-             if (Camera == null)
 
-             {
 
-                 Canvas canvas = transform.GetComponentInParent<Canvas>();
 
-                 if (canvas != null)
 
-                 {
 
-                     Camera = canvas.worldCamera;
 
-                 }
 
-             }
 
-             if (Camera == null)
 
-             {
 
-                 return;
 
-             }
 
-    
 
-             lineRenderer.BakeMesh(_Mesh, Camera, transform);
 
-             List<Vector3> nor = new List<Vector3>();
 
-             for (int i = 0; i < _Mesh.colors.Length; i++)
 
-             {
 
-                 nor.Add(new Vector3(_Mesh.colors[i].r, _Mesh.colors[i].g, 0));
 
-             }
 
-             _Mesh.normals = nor.ToArray();
 
-         }
 
-       
 
-         canvasRenderer.SetMesh(_Mesh);
 
-     }
 
-     // protected override void OnPopulateMesh(VertexHelper vh)
 
-     // {
 
-     //     base.OnPopulateMesh(vh);
 
-     // }
 
-     public void ModifyMesh(Mesh mesh)
 
-     {
 
-     }
 
-     public void ModifyMesh(VertexHelper verts)
 
-     {
 
-         UIVertex vertex = new UIVertex();
 
-         for (int i = 0; i < verts.currentVertCount; i++)
 
-         {
 
-             verts.PopulateUIVertex(ref vertex, i);
 
-             vertex.color = _Mesh.colors[i];
 
-             vertex.normal = new Vector3(vertex.color.r, vertex.color.g);
 
-             verts.SetUIVertex(vertex, i);
 
-         }
 
-     }
 
- }
 
 
  |