using System; using System.Collections.Generic; using UnityEngine; using Random = UnityEngine.Random; namespace Test { [RequireComponent(typeof(MeshFilter)), RequireComponent(typeof(MeshRenderer))] public class TestMesh : MonoBehaviour { Mesh mesh; private void Awake() { mesh = new Mesh(); // 定义顶点数组 List vertices = new List(); // 定义三角形数组,每个三角形由三个顶点的索引组成 List triangles = new List(); List colors = new List(); for (int z = 0; z < 3; z++) { for (int x = 0; x < 3; x++) { var center = new Vector3( // (x + z * 0.5f - z / 2): x加上z的一半,再减去z的一半的整数值 (x + z * 0.5f - z / 2) * (HexMetrics.innerRadius * 2f), 0, HexMetrics.offset * z); Color color = new Color(Random.Range(0,1f), Random.Range(0,1f), Random.Range(0,1f), 1); for (int i = 0; i < 6; i++) { var verticesCount = vertices.Count; vertices.Add(center); vertices.Add(center + HexMetrics.corners[i]); vertices.Add(center + HexMetrics.corners[i + 1]); triangles.Add(verticesCount); triangles.Add(verticesCount + 1); triangles.Add(verticesCount + 2); colors.Add(color); colors.Add(color); colors.Add(color); } } } mesh.vertices = vertices.ToArray(); mesh.colors = colors.ToArray(); mesh.triangles = triangles.ToArray(); // 计算法线 mesh.RecalculateNormals(); GetComponent().mesh = mesh; // 为 MeshRenderer 指定材质 // GetComponent().material = new Material(Shader.Find("Standard")); } } }