using System.Collections.Generic; using UnityEngine; namespace HexFiled { [RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] public class HexMesh : MonoBehaviour { Mesh hexMesh; List vertices; List colors; List triangles; MeshCollider meshCollider; void Awake () { GetComponent().mesh = hexMesh = new Mesh(); meshCollider = gameObject.AddComponent(); hexMesh.name = "Hex Mesh"; vertices = new List(); colors = new List(); triangles = new List(); } public void Triangulate (HexCell[] cells) { hexMesh.Clear(); vertices.Clear(); colors.Clear(); triangles.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(); meshCollider.sharedMesh = hexMesh; } 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); } } 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); } } }