5using System.Collections.Generic;
9 [AddComponentMenu(
"UI/Extensions/Primitives/UILineTextureRenderer")]
13 Rect m_UVRect =
new Rect(0f, 0f, 1f, 1f);
15 private Vector2[] m_points;
33 if (m_UVRect == value)
51 if (m_points == value)
61 if (m_points ==
null || m_points.Length < 2)
62 m_points =
new[] {
new Vector2(0, 0),
new Vector2(1, 1) };
64 var sizeX = rectTransform.rect.width;
65 var sizeY = rectTransform.rect.height;
66 var offsetX = -rectTransform.pivot.x * rectTransform.rect.width;
67 var offsetY = -rectTransform.pivot.y * rectTransform.rect.height;
77 var pointList =
new List<Vector2>();
78 pointList.Add(m_points[0]);
79 var capPoint = m_points[0] + (m_points[1] - m_points[0]).normalized * capSize;
80 pointList.Add(capPoint);
83 for (
int i = 1; i < m_points.Length - 1; i++)
85 pointList.Add(m_points[i]);
87 capPoint = m_points[m_points.Length - 1] - (m_points[m_points.Length - 1] - m_points[m_points.Length - 2]).normalized * capSize;
88 pointList.Add(capPoint);
89 pointList.Add(m_points[m_points.Length - 1]);
91 var Tempm_points = pointList.ToArray();
102 Vector2 prevV1 = Vector2.zero;
103 Vector2 prevV2 = Vector2.zero;
105 for (
int i = 1; i < Tempm_points.Length; i++)
107 var prev = Tempm_points[i - 1];
108 var cur = Tempm_points[i];
109 prev =
new Vector2(prev.x * sizeX + offsetX, prev.y * sizeY + offsetY);
110 cur =
new Vector2(cur.x * sizeX + offsetX, cur.y * sizeY + offsetY);
112 float angle = Mathf.Atan2(cur.y - prev.y, cur.x - prev.x) * 180f / Mathf.PI;
124 Vector2 uvTopLeft = Vector2.zero;
125 Vector2 uvBottomLeft =
new Vector2(0, 1);
127 Vector2 uvTopCenter =
new Vector2(0.5f, 0);
128 Vector2 uvBottomCenter =
new Vector2(0.5f, 1);
130 Vector2 uvTopRight =
new Vector2(1, 0);
131 Vector2 uvBottomRight =
new Vector2(1, 1);
133 Vector2[] uvs =
new[] { uvTopCenter, uvBottomCenter, uvBottomCenter, uvTopCenter };
136 vh.AddUIVertexQuad(
SetVbo(
new[] { prevV1, prevV2, v1, v2 }, uvs));
139 uvs =
new[] { uvTopLeft, uvBottomLeft, uvBottomCenter, uvTopCenter };
140 else if (i == Tempm_points.Length - 1)
141 uvs =
new[] { uvTopCenter, uvBottomCenter, uvBottomRight, uvTopRight };
143 vh.AddUIVertexQuad(
SetVbo(
new[] { v1, v2, v3, v4 }, uvs));
153 Vector3 dir = point - pivot;
154 dir = Quaternion.Euler(angles) * dir;
Vector3 RotatePointAroundPivot(Vector3 point, Vector3 pivot, Vector3 angles)
Rect uvRect
UV rectangle used by the texture.
override void OnPopulateMesh(VertexHelper vh)
Vector2[] Points
Points to be drawn in the line.
UIVertex[] SetVbo(Vector2[] vertices, Vector2[] uvs)
Credit Erdener Gonenc - @PixelEnvision.