//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, August 10, 2017 //-------------------------------------------------------- using UnityEngine; using UnityEngine.UI; /// /// 这个组件接收一些顶点,绘制出水平和垂直的线。 /// public class PolylineImage:Graphic { [SerializeField] float m_Width; public float width { get { return this.m_Width; } set { this.m_Width = value; base.SetVerticesDirty(); } } [SerializeField] Vector2[] m_Points; public Vector2[] points { get { return this.m_Points; } set { this.m_Points = value; base.SetVerticesDirty(); } } protected override void OnPopulateMesh(VertexHelper vh) { vh.Clear(); if(this.points == null || this.points.Length < 2) { return; } var hw = this.width * 0.5f; for(var i = 0;i < this.points.Length - 1;i++) { var point = this.points[i]; var nextPoint = this.points[i + 1]; var xReversal = point.x > nextPoint.x; var yReversal = point.y > nextPoint.y; var positions = new Vector3[4]; positions[0] = new Vector2(xReversal ? point.x + hw : point.x - hw,yReversal ? point.y + hw : point.y - hw); positions[1] = new Vector2(xReversal ? nextPoint.x - hw : nextPoint.x + hw,yReversal ? point.y + hw : point.y - hw); positions[2] = new Vector2(xReversal ? nextPoint.x - hw : nextPoint.x + hw,yReversal ? nextPoint.y - hw : nextPoint.y + hw); positions[3] = new Vector2(xReversal ? point.x + hw : point.x - hw,yReversal ? nextPoint.y - hw : nextPoint.y + hw); UIUtility.AddQuad(vh,positions,color,new Vector2[4] { Vector2.one,Vector2.one,Vector2.one,Vector2.one }); } } }