diff --git a/Scripts/ImageExtended.cs b/Scripts/ImageExtended.cs
index 87a82d9..e2b6a4d 100644
--- a/Scripts/ImageExtended.cs
+++ b/Scripts/ImageExtended.cs
@@ -9,6 +9,7 @@ namespace UnityEngine.UI.Extensions
{
///
/// Image is a textured element in the UI hierarchy.
+ /// Non-Functional as of 5.2.1p+ / 5.3, need to see updated Image Base script updates to fix properly.
///
[AddComponentMenu("UI/Extensions/Image Extended")]
@@ -196,7 +197,6 @@ namespace UnityEngine.UI.Extensions
var size = overrideSprite == null ? Vector2.zero : new Vector2(overrideSprite.rect.width, overrideSprite.rect.height);
Rect r = GetPixelAdjustedRect();
- // Debug.Log(string.Format("r:{2}, size:{0}, padding:{1}", size, padding, r));
int spriteW = Mathf.RoundToInt(size.x);
int spriteH = Mathf.RoundToInt(size.y);
@@ -253,13 +253,10 @@ namespace UnityEngine.UI.Extensions
/// Update the UI renderer mesh.
///
- protected override void OnPopulateMesh(Mesh toFill)
+ protected override void OnPopulateMesh(VertexHelper vh)
{
List vbo = new List();
- using (var helper = new VertexHelper(toFill))
- {
- helper.GetUIVertexStream(vbo);
- }
+ vh.GetUIVertexStream(vbo);
switch (type)
{
@@ -276,12 +273,8 @@ namespace UnityEngine.UI.Extensions
GenerateFilledSprite(vbo, m_PreserveAspect);
break;
}
-
- using (var helper = new VertexHelper())
- {
- helper.AddUIVertexTriangleStream(vbo);
- helper.FillMesh(toFill);
- }
+ vh.Clear();
+ vh.AddUIVertexTriangleStream(vbo);
}
#region Various fill functions
diff --git a/Scripts/LetterSpacing.cs b/Scripts/LetterSpacing.cs
index 93f7bf4..d4778d3 100644
--- a/Scripts/LetterSpacing.cs
+++ b/Scripts/LetterSpacing.cs
@@ -46,7 +46,9 @@ using System.Collections.Generic;
namespace UnityEngine.UI.Extensions
{
[AddComponentMenu("UI/Effects/Extensions/Letter Spacing")]
- public class LetterSpacing : BaseMeshEffect
+ ///Summary
+ /// Note, LetterSpacing is now non-functional in 5.2.1p+ / 5.3, seems the vertex order has changed?
+ public class LetterSpacing : BaseMeshEffect
{
[SerializeField]
private float m_spacing = 0f;
diff --git a/Scripts/Primatives/DiamondGraph.cs b/Scripts/Primatives/DiamondGraph.cs
index c986f98..4f63516 100644
--- a/Scripts/Primatives/DiamondGraph.cs
+++ b/Scripts/Primatives/DiamondGraph.cs
@@ -15,8 +15,9 @@ namespace UnityEngine.UI.Extensions
public float c = 1;
public float d = 1;
- protected override void OnPopulateMesh(Mesh m)
+ protected override void OnPopulateMesh(VertexHelper vh)
{
+ vh.Clear();
float wHalf = rectTransform.rect.width / 2;
//float hHalf = rectTransform.rect.height / 2;
a = Math.Min(1, Math.Max(0, a));
@@ -25,17 +26,13 @@ namespace UnityEngine.UI.Extensions
d = Math.Min(1, Math.Max(0, d));
Color32 color32 = color;
- using (var vh = new VertexHelper())
- {
- vh.AddVert(new Vector3(-wHalf * a, 0), color32, new Vector2(0f, 0f));
- vh.AddVert(new Vector3(0, wHalf * b), color32, new Vector2(0f, 1f));
- vh.AddVert(new Vector3(wHalf * c, 0), color32, new Vector2(1f, 1f));
- vh.AddVert(new Vector3(0, -wHalf * d), color32, new Vector2(1f, 0f));
+ vh.AddVert(new Vector3(-wHalf * a, 0), color32, new Vector2(0f, 0f));
+ vh.AddVert(new Vector3(0, wHalf * b), color32, new Vector2(0f, 1f));
+ vh.AddVert(new Vector3(wHalf * c, 0), color32, new Vector2(1f, 1f));
+ vh.AddVert(new Vector3(0, -wHalf * d), color32, new Vector2(1f, 0f));
- vh.AddTriangle(0, 1, 2);
- vh.AddTriangle(2, 3, 0);
- vh.FillMesh(m);
- }
+ vh.AddTriangle(0, 1, 2);
+ vh.AddTriangle(2, 3, 0);
}
}
}
\ No newline at end of file
diff --git a/Scripts/Primatives/UICircle.cs b/Scripts/Primatives/UICircle.cs
index 89694e7..ff2137d 100644
--- a/Scripts/Primatives/UICircle.cs
+++ b/Scripts/Primatives/UICircle.cs
@@ -67,13 +67,12 @@ namespace UnityEngine.UI.Extensions
}
- protected override void OnPopulateMesh(Mesh toFill)
+ protected override void OnPopulateMesh(VertexHelper vh)
{
float outer = -rectTransform.pivot.x * rectTransform.rect.width;
float inner = -rectTransform.pivot.x * rectTransform.rect.width + this.thickness;
- toFill.Clear();
- var vbo = new VertexHelper(toFill);
+ vh.Clear();
Vector2 prevX = Vector2.zero;
Vector2 prevY = Vector2.zero;
@@ -119,15 +118,9 @@ namespace UnityEngine.UI.Extensions
prevX = pos1;
prevY = pos2;
- vbo.AddUIVertexQuad(SetVbo(new[] { pos0, pos1, pos2, pos3 }, new[] { uv0, uv1, uv2, uv3 }));
+ vh.AddUIVertexQuad(SetVbo(new[] { pos0, pos1, pos2, pos3 }, new[] { uv0, uv1, uv2, uv3 }));
}
-
- if (vbo.currentVertCount > 3)
- {
- vbo.FillMesh(toFill);
- }
-
}
}
}
\ No newline at end of file
diff --git a/Scripts/Primatives/UICornerCut.cs b/Scripts/Primatives/UICornerCut.cs
index f25ea10..2e6bd88 100644
--- a/Scripts/Primatives/UICornerCut.cs
+++ b/Scripts/Primatives/UICornerCut.cs
@@ -1,156 +1,159 @@
-///
-/// Created by Freezy - ElicitIce.nl
-/// Posted on Unity Forums http://forum.unity3d.com/threads/cut-corners-primative.359494/
-///
-/// Free for any use and alteration, source code may not be sold without my permission.
-/// If you make improvements on this script please share them with the community.
-///
-///
-/// Here is a script that will take a rectangular TransformRect and cut off some corners based on the corner size.
-/// This is great for when you need a quick and easy non-square panel/image.
-/// Enjoy!
-/// It adds an additional square if the relevant side has a corner cut, it then offsets the ends to simulate a cut corner.
-/// UVs are being set, but might be skewed when a texture is applied.
-/// You could hide the additional colors by using the following:
-/// http://rumorgames.com/hide-in-inspector/
-///
-///
-
-namespace UnityEngine.UI.Extensions {
- [ExecuteInEditMode]
- [AddComponentMenu("UI/Extensions/Primitives/Cut Corners")]
- public class UICornerCut : MaskableGraphic {
-
- public Vector2 cornerSize = new Vector2(16, 16);
-
- [Header("Corners to cut")]
- public bool cutUL = true;
- public bool cutUR;
- public bool cutLL;
- public bool cutLR;
-
- [Tooltip("Up-Down colors become Left-Right colors")]
- public bool makeColumns = false;
-
- [Header("Color the cut bars differently")]
- public bool useColorUp;
-// [HideUnless("useColorUp")]
- public Color32 colorUp = Color.blue;
-
- public bool useColorDown;
-// [HideUnless("useColorDown")]
- public Color32 colorDown = Color.green;
-
- protected override void OnPopulateMesh(Mesh m) {
- var rect = rectTransform.rect;
- var rectNew = rect;
-
- Color32 color32 = color;
- using (var vh = new VertexHelper()) {
- bool up = cutUL | cutUR;
- bool down = cutLL | cutLR;
- bool left = cutLL | cutUL;
- bool right = cutLR | cutUR;
- bool any = up | down;
-
- if (any && cornerSize.sqrMagnitude > 0) {
- //nibble off the sides
-
- if (left)
- rectNew.xMin += cornerSize.x;
- if (down)
- rectNew.yMin += cornerSize.y;
- if (up)
- rectNew.yMax -= cornerSize.y;
- if (right)
- rectNew.xMax -= cornerSize.x;
-
- //add two squares to the main square
- Vector2 ul, ur, ll, lr;
-
- if (makeColumns) {
- ul = new Vector2(rect.xMin, cutUL ? rectNew.yMax : rect.yMax);
- ur = new Vector2(rect.xMax, cutUR ? rectNew.yMax : rect.yMax);
- ll = new Vector2(rect.xMin, cutLL ? rectNew.yMin : rect.yMin);
- lr = new Vector2(rect.xMax, cutLR ? rectNew.yMin : rect.yMin);
-
- if (left)
- AddSquare(
- ll, ul,
- new Vector2(rectNew.xMin, rect.yMax),
- new Vector2(rectNew.xMin, rect.yMin),
- rect, useColorUp ? colorUp : color32, vh);
- if (right)
- AddSquare(
- ur, lr,
- new Vector2(rectNew.xMax, rect.yMin),
- new Vector2(rectNew.xMax, rect.yMax),
- rect, useColorDown ? colorDown : color32, vh);
- } else {
- ul = new Vector2(cutUL ? rectNew.xMin : rect.xMin, rect.yMax);
- ur = new Vector2(cutUR ? rectNew.xMax : rect.xMax, rect.yMax);
- ll = new Vector2(cutLL ? rectNew.xMin : rect.xMin, rect.yMin);
- lr = new Vector2(cutLR ? rectNew.xMax : rect.xMax, rect.yMin);
- if (down)
- AddSquare(
- lr, ll,
- new Vector2(rect.xMin, rectNew.yMin),
- new Vector2(rect.xMax, rectNew.yMin),
- rect, useColorDown ? colorDown : color32, vh);
- if (up)
- AddSquare(
- ul, ur,
- new Vector2(rect.xMax, rectNew.yMax),
- new Vector2(rect.xMin, rectNew.yMax),
- rect, useColorUp ? colorUp : color32, vh);
- }
- }
-
- //center
- if (makeColumns)
- AddSquare(new Rect(rectNew.xMin, rect.yMin, rectNew.width, rect.height), rect, color32, vh);
- else
- AddSquare(new Rect(rect.xMin, rectNew.yMin, rect.width, rectNew.height), rect, color32, vh);
-
- vh.FillMesh(m);
- }
- }
-
- private static void AddSquare(Rect rect, Rect rectUV, Color32 color32, VertexHelper vh) {
- int v0 = AddVert(rect.xMin, rect.yMin, rectUV, color32, vh);
- int v1 = AddVert(rect.xMin, rect.yMax, rectUV, color32, vh);
- int v2 = AddVert(rect.xMax, rect.yMax, rectUV, color32, vh);
- int v3 = AddVert(rect.xMax, rect.yMin, rectUV, color32, vh);
-
- vh.AddTriangle(v0, v1, v2);
- vh.AddTriangle(v2, v3, v0);
- }
-
- private static void AddSquare(Vector2 a, Vector2 b, Vector2 c, Vector2 d, Rect rectUV, Color32 color32, VertexHelper vh) {
- int v0 = AddVert(a.x, a.y, rectUV, color32, vh);
- int v1 = AddVert(b.x, b.y, rectUV, color32, vh);
- int v2 = AddVert(c.x, c.y, rectUV, color32, vh);
- int v3 = AddVert(d.x, d.y, rectUV, color32, vh);
-
- vh.AddTriangle(v0, v1, v2);
- vh.AddTriangle(v2, v3, v0);
- }
-
- ///
- /// Auto UV handler within the assigned area
- ///
- ///
- ///
- ///
- ///
- ///
- private static int AddVert(float x, float y, Rect area, Color32 color32, VertexHelper vh) {
- var uv = new Vector2(
- Mathf.InverseLerp(area.xMin, area.xMax, x),
- Mathf.InverseLerp(area.yMin, area.yMax, y)
- );
- vh.AddVert(new Vector3(x, y), color32, uv);
- return vh.currentVertCount - 1;
- }
- }
+///
+/// Created by Freezy - ElicitIce.nl
+/// Posted on Unity Forums http://forum.unity3d.com/threads/cut-corners-primative.359494/
+///
+/// Free for any use and alteration, source code may not be sold without my permission.
+/// If you make improvements on this script please share them with the community.
+///
+///
+/// Here is a script that will take a rectangular TransformRect and cut off some corners based on the corner size.
+/// This is great for when you need a quick and easy non-square panel/image.
+/// Enjoy!
+/// It adds an additional square if the relevant side has a corner cut, it then offsets the ends to simulate a cut corner.
+/// UVs are being set, but might be skewed when a texture is applied.
+/// You could hide the additional colors by using the following:
+/// http://rumorgames.com/hide-in-inspector/
+///
+///
+
+namespace UnityEngine.UI.Extensions {
+ [ExecuteInEditMode]
+ [AddComponentMenu("UI/Extensions/Primitives/Cut Corners")]
+ public class UICornerCut : MaskableGraphic {
+
+ public Vector2 cornerSize = new Vector2(16, 16);
+
+ [Header("Corners to cut")]
+ public bool cutUL = true;
+ public bool cutUR;
+ public bool cutLL;
+ public bool cutLR;
+
+ [Tooltip("Up-Down colors become Left-Right colors")]
+ public bool makeColumns = false;
+
+ [Header("Color the cut bars differently")]
+ public bool useColorUp;
+// [HideUnless("useColorUp")]
+ public Color32 colorUp = Color.blue;
+
+ public bool useColorDown;
+// [HideUnless("useColorDown")]
+ public Color32 colorDown = Color.green;
+
+ protected override void OnPopulateMesh(VertexHelper vh)
+ {
+ var rect = rectTransform.rect;
+ var rectNew = rect;
+
+ Color32 color32 = color;
+ bool up = cutUL | cutUR;
+ bool down = cutLL | cutLR;
+ bool left = cutLL | cutUL;
+ bool right = cutLR | cutUR;
+ bool any = up | down;
+
+ if (any && cornerSize.sqrMagnitude > 0)
+ {
+
+ //nibble off the sides
+ vh.Clear();
+ if (left)
+ rectNew.xMin += cornerSize.x;
+ if (down)
+ rectNew.yMin += cornerSize.y;
+ if (up)
+ rectNew.yMax -= cornerSize.y;
+ if (right)
+ rectNew.xMax -= cornerSize.x;
+
+ //add two squares to the main square
+ Vector2 ul, ur, ll, lr;
+
+ if (makeColumns)
+ {
+ ul = new Vector2(rect.xMin, cutUL ? rectNew.yMax : rect.yMax);
+ ur = new Vector2(rect.xMax, cutUR ? rectNew.yMax : rect.yMax);
+ ll = new Vector2(rect.xMin, cutLL ? rectNew.yMin : rect.yMin);
+ lr = new Vector2(rect.xMax, cutLR ? rectNew.yMin : rect.yMin);
+
+ if (left)
+ AddSquare(
+ ll, ul,
+ new Vector2(rectNew.xMin, rect.yMax),
+ new Vector2(rectNew.xMin, rect.yMin),
+ rect, useColorUp ? colorUp : color32, vh);
+ if (right)
+ AddSquare(
+ ur, lr,
+ new Vector2(rectNew.xMax, rect.yMin),
+ new Vector2(rectNew.xMax, rect.yMax),
+ rect, useColorDown ? colorDown : color32, vh);
+ }
+ else
+ {
+ ul = new Vector2(cutUL ? rectNew.xMin : rect.xMin, rect.yMax);
+ ur = new Vector2(cutUR ? rectNew.xMax : rect.xMax, rect.yMax);
+ ll = new Vector2(cutLL ? rectNew.xMin : rect.xMin, rect.yMin);
+ lr = new Vector2(cutLR ? rectNew.xMax : rect.xMax, rect.yMin);
+ if (down)
+ AddSquare(
+ lr, ll,
+ new Vector2(rect.xMin, rectNew.yMin),
+ new Vector2(rect.xMax, rectNew.yMin),
+ rect, useColorDown ? colorDown : color32, vh);
+ if (up)
+ AddSquare(
+ ul, ur,
+ new Vector2(rect.xMax, rectNew.yMax),
+ new Vector2(rect.xMin, rectNew.yMax),
+ rect, useColorUp ? colorUp : color32, vh);
+ }
+
+ //center
+ if (makeColumns)
+ AddSquare(new Rect(rectNew.xMin, rect.yMin, rectNew.width, rect.height), rect, color32, vh);
+ else
+ AddSquare(new Rect(rect.xMin, rectNew.yMin, rect.width, rectNew.height), rect, color32, vh);
+
+ }
+ }
+
+ private static void AddSquare(Rect rect, Rect rectUV, Color32 color32, VertexHelper vh) {
+ int v0 = AddVert(rect.xMin, rect.yMin, rectUV, color32, vh);
+ int v1 = AddVert(rect.xMin, rect.yMax, rectUV, color32, vh);
+ int v2 = AddVert(rect.xMax, rect.yMax, rectUV, color32, vh);
+ int v3 = AddVert(rect.xMax, rect.yMin, rectUV, color32, vh);
+
+ vh.AddTriangle(v0, v1, v2);
+ vh.AddTriangle(v2, v3, v0);
+ }
+
+ private static void AddSquare(Vector2 a, Vector2 b, Vector2 c, Vector2 d, Rect rectUV, Color32 color32, VertexHelper vh) {
+ int v0 = AddVert(a.x, a.y, rectUV, color32, vh);
+ int v1 = AddVert(b.x, b.y, rectUV, color32, vh);
+ int v2 = AddVert(c.x, c.y, rectUV, color32, vh);
+ int v3 = AddVert(d.x, d.y, rectUV, color32, vh);
+
+ vh.AddTriangle(v0, v1, v2);
+ vh.AddTriangle(v2, v3, v0);
+ }
+
+ ///
+ /// Auto UV handler within the assigned area
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ private static int AddVert(float x, float y, Rect area, Color32 color32, VertexHelper vh) {
+ var uv = new Vector2(
+ Mathf.InverseLerp(area.xMin, area.xMax, x),
+ Mathf.InverseLerp(area.yMin, area.yMax, y)
+ );
+ vh.AddVert(new Vector3(x, y), color32, uv);
+ return vh.currentVertCount - 1;
+ }
+ }
}
\ No newline at end of file
diff --git a/Scripts/Primatives/UILineRenderer.cs b/Scripts/Primatives/UILineRenderer.cs
index 6398d83..52be296 100644
--- a/Scripts/Primatives/UILineRenderer.cs
+++ b/Scripts/Primatives/UILineRenderer.cs
@@ -65,7 +65,7 @@ namespace UnityEngine.UI.Extensions
}
}
- protected override void OnPopulateMesh(Mesh toFill)
+ protected override void OnPopulateMesh(VertexHelper vh)
{
// requires sets of quads
if (Points == null || Points.Length < 2)
@@ -107,8 +107,7 @@ namespace UnityEngine.UI.Extensions
offsetY += Margin.y / 2f;
}
- toFill.Clear();
- var vbo = new VertexHelper(toFill);
+ vh.Clear();
Vector2 prevV1 = Vector2.zero;
Vector2 prevV2 = Vector2.zero;
@@ -144,24 +143,19 @@ namespace UnityEngine.UI.Extensions
Vector2[] uvs = new[] { uvTopCenter, uvBottomCenter, uvBottomCenter, uvTopCenter };
if (i > 1)
- vbo.AddUIVertexQuad(SetVbo(new[] { prevV1, prevV2, v1, v2 }, uvs));
+ vh.AddUIVertexQuad(SetVbo(new[] { prevV1, prevV2, v1, v2 }, uvs));
if (i == 1)
uvs = new[] { uvTopLeft, uvBottomLeft, uvBottomCenter, uvTopCenter };
else if (i == TempPoints.Length - 1)
uvs = new[] { uvTopCenter, uvBottomCenter, uvBottomRight, uvTopRight };
- vbo.AddUIVertexQuad(SetVbo(new[] { v1, v2, v3, v4 }, uvs));
+ vh.AddUIVertexQuad(SetVbo(new[] { v1, v2, v3, v4 }, uvs));
prevV1 = v3;
prevV2 = v4;
}
-
- if (vbo.currentVertCount > 3)
- {
- vbo.FillMesh(toFill);
- }
}
protected UIVertex[] SetVbo(Vector2[] vertices, Vector2[] uvs)
diff --git a/Scripts/Primatives/UILineTextureRenderer.cs b/Scripts/Primatives/UILineTextureRenderer.cs
index 8e6a101..6b4476f 100644
--- a/Scripts/Primatives/UILineTextureRenderer.cs
+++ b/Scripts/Primatives/UILineTextureRenderer.cs
@@ -66,7 +66,7 @@ namespace UnityEngine.UI.Extensions
}
}
- protected override void OnPopulateMesh(Mesh toFill)
+ protected override void OnPopulateMesh(VertexHelper vh)
{
// requires sets of quads
if (Points == null || Points.Length < 2)
@@ -108,8 +108,7 @@ namespace UnityEngine.UI.Extensions
offsetY += Margin.y / 2f;
}
- toFill.Clear();
- var vbo = new VertexHelper(toFill);
+ vh.Clear();
Vector2 prevV1 = Vector2.zero;
Vector2 prevV2 = Vector2.zero;
@@ -145,24 +144,19 @@ namespace UnityEngine.UI.Extensions
Vector2[] uvs = new[] { uvTopCenter, uvBottomCenter, uvBottomCenter, uvTopCenter };
if (i > 1)
- vbo.AddUIVertexQuad(SetVbo(new[] { prevV1, prevV2, v1, v2 }, uvs));
+ vh.AddUIVertexQuad(SetVbo(new[] { prevV1, prevV2, v1, v2 }, uvs));
if (i == 1)
uvs = new[] { uvTopLeft, uvBottomLeft, uvBottomCenter, uvTopCenter };
else if (i == TempPoints.Length - 1)
uvs = new[] { uvTopCenter, uvBottomCenter, uvBottomRight, uvTopRight };
- vbo.AddUIVertexQuad(SetVbo(new[] { v1, v2, v3, v4 }, uvs));
+ vh.AddUIVertexQuad(SetVbo(new[] { v1, v2, v3, v4 }, uvs));
prevV1 = v3;
prevV2 = v4;
}
-
- if (vbo.currentVertCount > 3)
- {
- vbo.FillMesh(toFill);
- }
}
protected UIVertex[] SetVbo(Vector2[] vertices, Vector2[] uvs)