AkiraPixelWind/Assets/Scripts/Main/UI/UIYYControl/UIPolygon.cs

74 lines
1.9 KiB
C#
Raw Normal View History

2022-12-29 18:20:40 +08:00
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();
}
}