public Triangle(Vector3 pos, float radius, int index) { Indices = new int[] { VertexDict.Add(pos), VertexDict.Add(pos + GetVertex(radius, index)), VertexDict.Add(pos + GetVertex(radius, index + 1)) }; }
public void Initialize() { List <Hexagon> hexagons = new List <Hexagon>(); float sqrt3 = Mathf.Sqrt(3f); for (int q = -extent; q <= extent; q++) { int r1 = Mathf.Max(-extent, -q - extent); int r2 = Mathf.Min(extent, -q + extent); for (int r = r1; r <= r2; r++) { hexagons.Add(new Hexagon(new Vector3( hexRadius * sqrt3 * (q + r / 2f), 0, hexRadius * 3f / 2f * r), hexRadius)); } } Vector3[] vertices = VertexDict.ToArray(); List <int> triangles = new List <int>(); foreach (Hexagon hexagon in hexagons) { for (int i = 0; i < 18; i++) { triangles.Add(hexagon.Triangles[i / 3].Indices[i % 3]); } } mesh = new Mesh(); mesh.vertices = vertices; mesh.triangles = triangles.ToArray(); mesh.RecalculateBounds(); Size = mesh.bounds.size.x; Vector3 min = mesh.bounds.min; Vector2[] uv = new Vector2[vertices.Length]; for (int i = 0; i < vertices.Length; i++) { uv[i] = new Vector2((vertices[i].x - min.x) / Size, (vertices[i].z - min.z) / Size); } mesh.uv = uv; mesh.RecalculateNormals(); // TODO mesh.RecalculateTangents(); // TODO mesh.MarkDynamic(); GetComponent <MeshFilter>().sharedMesh = mesh; coll = GetComponent <MeshCollider>(); coll.sharedMesh = mesh; }
void Awake() { //new mesh lists triangles = new List <int>(); vertDict = new VertexDict(); vertices = new List <Vector3>(); uvs = new List <Vector2>(); normals = new List <Vector3>(); //build debug texture as a fallback if no material is supplied debugTex = new Texture2D(2, 2); debugTex.SetPixel(0, 0, Color.red); debugTex.SetPixel(1, 0, Color.magenta); debugTex.SetPixel(0, 1, Color.blue); debugTex.SetPixel(1, 1, Color.cyan); debugTex.wrapMode = TextureWrapMode.Repeat; debugTex.Apply(); }