| //-------------------------------------------------------- | 
| //    [Author]:           玩个游戏 | 
| //    [  Date ]:           Thursday, August 10, 2017 | 
| //-------------------------------------------------------- | 
| using UnityEngine; | 
| using System.Collections; | 
| using UnityEngine.UI; | 
| using UnityEngine.Sprites; | 
| using System; | 
|   | 
|   | 
| [DisallowMultipleComponent] | 
| [RequireComponent(typeof(Image))] | 
| public class CustomImage:BaseMeshEffect { | 
|   | 
|     [SerializeField] | 
|     Vector2[] m_Points; | 
|     public Vector2[] points { | 
|         get { | 
|             return this.m_Points; | 
|         } | 
|         set { | 
|             this.m_Points = value; | 
|             SetVerticesDirty(); | 
|         } | 
|     } | 
|   | 
|     private Image m_Image; | 
|     public Image image { | 
|         get { | 
|             return this.m_Image ?? (this.m_Image = this.AddMissingComponent<Image>()); | 
|         } | 
|     } | 
|   | 
|     public void SetVerticesDirty() { | 
|         this.graphic.SetVerticesDirty(); | 
|     } | 
|   | 
|     public override void ModifyMesh(VertexHelper vh) { | 
|         vh.Clear(); | 
|   | 
|         if(this.image == null) { | 
|             throw new NullReferenceException(); | 
|         } | 
|   | 
|         if(this.points == null || this.points.Length < 3) { | 
|             return; | 
|         } | 
|   | 
|         var width = this.image.rectTransform.rect.width; | 
|         var height = this.image.rectTransform.rect.height; | 
|   | 
|         var uv = this.image.overrideSprite != null ? DataUtility.GetOuterUV(this.image.overrideSprite) : Vector4.zero; | 
|         var uvcenterX = (uv.x + uv.z) * 0.5f; | 
|         var uvcenterY = (uv.y + uv.w) * 0.5f; | 
|         var uvscaleX = (uv.z - uv.x) / width; | 
|         var uvscaleY = (uv.w - uv.y) / height; | 
|   | 
|         for(var i = 0;i < this.points.Length;i++) { | 
|             var point = this.points[i]; | 
|   | 
|             var position = new Vector2(point.x,point.y); | 
|             var uv0 = new Vector2(position.x * uvscaleX + uvcenterX,position.y * uvscaleY + uvcenterY); | 
|             var vertex = UIUtility.PackageUIVertex(position,uv0,this.image.color); | 
|             vh.AddVert(vertex); | 
|         } | 
|   | 
|         var vertexCount = this.points.Length; | 
|         var index = 0; | 
|         for(;index < vertexCount - 2;index++) { | 
|             vh.AddTriangle(index,index + 1,index + 2); | 
|         } | 
|     } | 
|   | 
| } |