69 lines
2.0 KiB
C#
69 lines
2.0 KiB
C#
|
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>();
|
|||
|
meshFilter.mesh = mesh;
|
|||
|
var meshRenderer = gameObject.AddComponent<MeshRenderer>();
|
|||
|
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());
|
|||
|
}
|
|||
|
}
|
|||
|
}
|