using System.Collections.Generic; using UnityEngine; [RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] public class HexMesh : MonoBehaviour { Mesh hexMesh; List vertices; List triangles; List colors; void Awake() { GetComponent().mesh = hexMesh = new Mesh(); hexMesh.name = "Hex Mesh"; vertices = new List(); triangles = new List(); colors = new List(); } public void Triangulate(HexCell[] cells) { hexMesh.Clear(); vertices.Clear(); triangles.Clear(); colors.Clear(); for (int i = 0; i < cells.Length; i++) { Triangulate(cells[i]); } hexMesh.vertices = vertices.ToArray(); hexMesh.colors = colors.ToArray(); hexMesh.triangles = triangles.ToArray(); hexMesh.RecalculateNormals(); } void AddTriangle(Vector3 v1, Vector3 v2, Vector3 v3) { int vertexIndex = vertices.Count; vertices.Add(v1); vertices.Add(v2); vertices.Add(v3); triangles.Add(vertexIndex); triangles.Add(vertexIndex + 1); triangles.Add(vertexIndex + 2); } void AddTriangleColor(Color color) { colors.Add(color); colors.Add(color); colors.Add(color); } void Triangulate(HexCell cell) { Vector3 center = cell.transform.localPosition; for (int i = 0; i < 6; i++) { AddTriangle( center, center + HexMetrics.corners[i], center + HexMetrics.corners[i + 1] ); AddTriangleColor(cell.color); } } }