From a839f200d97af8debf4afd5278b428f050d32b95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Sch=C3=B6ner?= <tobias.stonehead@gmail.com> Date: Fri, 10 Jun 2022 11:14:21 +0200 Subject: [PATCH] Improved CircleGenerator CircleGenerator now generates triangles around midPoint instead of using CreatePlane of ShapeGenerator --- .../Scripts/MeshGenerator/CircleGenerator.cs | 27 +++++++++++++++++-- .../Scripts/MeshGenerator/ShapeGenerator.cs | 6 +++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/MeshGenerator/CircleGenerator.cs b/Assets/Scripts/MeshGenerator/CircleGenerator.cs index a7ae7362..34dd152c 100644 --- a/Assets/Scripts/MeshGenerator/CircleGenerator.cs +++ b/Assets/Scripts/MeshGenerator/CircleGenerator.cs @@ -21,11 +21,34 @@ public class CircleGenerator : ShapeGenerator #region Implementation protected override void GenerateShape() { - Vector3[] circle = GetCirclePoints(radius, sideCount, Vector3.zero); + var circle = CreateCircle(radius, sideCount); if (circleMesh.sharedMesh != null) circleMesh.sharedMesh.Clear(); - circleMesh.mesh = CreateMesh(CreatePlane(circle)); + circleMesh.mesh = CreateMesh(circle); + + if (circleMesh.transform.TryGetComponent(out MeshCollider meshCol)) + meshCol.sharedMesh = circleMesh.sharedMesh; + } + + /// <summary> + /// Creates circle vertecies and triangles around the midPoint at (0,0,0) + /// </summary> + /// <param name="points"></param> + /// <param name="invert"></param> + /// <returns></returns> + static (Vector3[], int[]) CreateCircle(float radius, int sideCount, bool invert = false) + { + Vector3[] vertices = GetCirclePoints(radius, sideCount).Union(new Vector3[] { Vector3.zero }).ToArray(); + int[] triangles = new int[(vertices.Length - 1) * 3]; + int vertLen = vertices.Length; + for (int i = 0; i < vertLen-1; i++) + { + triangles[i * 3 + 0] = vertLen-1; // midPoint + triangles[i * 3 + 1] = i; + triangles[i * 3 + 2] = (i + 1) % (vertLen-1); + } + return (vertices, invert ? triangles.Reverse().ToArray() : triangles); } #endregion Implementation } diff --git a/Assets/Scripts/MeshGenerator/ShapeGenerator.cs b/Assets/Scripts/MeshGenerator/ShapeGenerator.cs index 95df8996..7bcddfc8 100644 --- a/Assets/Scripts/MeshGenerator/ShapeGenerator.cs +++ b/Assets/Scripts/MeshGenerator/ShapeGenerator.cs @@ -33,6 +33,12 @@ protected static Vector3[] GetCirclePoints(float circleRadius, int pointCount, V return circle; } + /// <summary> + /// Creates triangles for a set of vertecies of a flat, convex shape + /// </summary> + /// <param name="points"></param> + /// <param name="invert"></param> + /// <returns></returns> protected static (Vector3[], int[]) CreatePlane(Vector3[] points, bool invert = false) { Vector3[] vertices = points; -- GitLab