using System; using UnityEditor; using UnityEngine; // 创建正六边形网格的脚本 public class HexagonMesh : MonoBehaviour { public float radius = 1f; // 六边形的边长 public float offset = 30f; // 30f or 0f void Start() { RefreshMesh(offset); } void RefreshMesh(float offset) { Mesh mesh = new Mesh(); Vector3[] vertices = new Vector3[7]; int[] triangles = new int[18]; // 计算六个顶点 for (int i = 0; i < 6; i++) { float angle = Mathf.Deg2Rad * (60 * i) + offset; vertices[i] = new Vector3(radius * Mathf.Cos(angle), radius * Mathf.Sin(angle), 0); } vertices[6] = Vector3.zero; // 六边形的中心点 // 设置三角形的索引 for (int i = 0; i < 6; i++) { triangles[i * 3] = 6; // 中心点 triangles[i * 3 + 1] = i; // 当前顶点 triangles[i * 3 + 2] = (i + 1) % 6; // 下一个顶点 } mesh.vertices = vertices; mesh.triangles = triangles; mesh.RecalculateNormals(); mesh.RecalculateBounds(); MeshFilter meshFilter = gameObject.AddComponent(); meshFilter.mesh = mesh; var meshRenderer = gameObject.AddComponent(); meshRenderer.material = new Material(Shader.Find("Standard")); } void OnDrawGizmos() { Gizmos.color = Color.green; Vector3[] vertices = new Vector3[6]; for (int i = 0; i < 6; i++) { float angle = Mathf.Deg2Rad * (60 * i); vertices[i] = transform.position + new Vector3(Mathf.Cos(angle) * radius, Mathf.Sin(angle) * radius, 0); } // 绘制六边形边缘 for (int i = 0; i < 6; i++) { Gizmos.DrawLine(vertices[i], vertices[(i + 1) % 6]); Handles.color = Color.red; Handles.Label(vertices[i], vertices[(i + 1) % 6].ToString()); } } }