74 lines
1.9 KiB
C#
74 lines
1.9 KiB
C#
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using UnityEngine;
|
|||
|
using UnityEngine.UI;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 多边形 顺时针 先添加中心点 (0,0), 在添加N个顶点就可以了
|
|||
|
/// [转] http://www.xshadow.org/index.php/archives/73
|
|||
|
/// </summary>
|
|||
|
|
|||
|
public class UIPolygon : Graphic
|
|||
|
{
|
|||
|
|
|||
|
public List<Vector2> m_VertexList = new List<Vector2>(); // 顶点坐标列表 数量必须大于2
|
|||
|
|
|||
|
private VertexHelper m_VertexHelper;
|
|||
|
|
|||
|
public void Refresh()
|
|||
|
{
|
|||
|
if (m_VertexHelper == null)
|
|||
|
{
|
|||
|
Debug.Log("m_VertexHelper == null");
|
|||
|
return;
|
|||
|
}
|
|||
|
m_VertexHelper.Clear();
|
|||
|
|
|||
|
List<UIVertex> targetVertexList = new List<UIVertex>();
|
|||
|
int triangleCount = m_VertexList.Count - 1;
|
|||
|
for (int i = 0; i < triangleCount; i++)
|
|||
|
{
|
|||
|
// 组建三角形
|
|||
|
for (int j = 0; j < 3; j++)
|
|||
|
{
|
|||
|
UIVertex vertex = new UIVertex();
|
|||
|
if (j == 2)
|
|||
|
vertex.position = m_VertexList[0];
|
|||
|
else
|
|||
|
{
|
|||
|
int vertexIndex = i + j + 1;
|
|||
|
|
|||
|
if (vertexIndex > triangleCount)
|
|||
|
vertex.position = m_VertexList[1];
|
|||
|
else
|
|||
|
vertex.position = m_VertexList[vertexIndex];
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
vertex.color = color;
|
|||
|
if (j == 2)
|
|||
|
//vertex.color = new Color(color.r, color.g, color.b, 0);
|
|||
|
vertex.color = new Color(0,0,0, 0);
|
|||
|
|
|||
|
targetVertexList.Add(vertex);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
m_VertexHelper.AddUIVertexTriangleStream(targetVertexList);
|
|||
|
}
|
|||
|
|
|||
|
protected override void OnPopulateMesh(VertexHelper vh)
|
|||
|
{
|
|||
|
base.OnPopulateMesh(vh);
|
|||
|
m_VertexHelper = vh;
|
|||
|
|
|||
|
if (m_VertexList == null)
|
|||
|
return;
|
|||
|
|
|||
|
if (m_VertexList.Count < 3)
|
|||
|
return;
|
|||
|
|
|||
|
Refresh();
|
|||
|
}
|
|||
|
}
|