public void AddOutlines(float radius, Grid.HexOrientation orientation) { LineRenderer lines = GetComponent <LineRenderer>(); lines.lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.Off; lines.receiveShadows = false; lines.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; lines.startWidth = 0.1f; lines.endWidth = 0.1f; lines.startColor = Color.cyan; lines.endColor = Color.blue; //lines.material = lineMaterial; lines.useWorldSpace = false; lines.material = new Material(Shader.Find("Particles/Additive")); lines.positionCount = 7; for (int vert = 0; vert <= 6; vert++) { Vector3 pos = Tile.Corner(Vector3.zero, radius, vert, orientation); Vector3 worldPos = transform.TransformPoint(pos); float y = grid.SampleHeight(worldPos); Vector3 localPos = transform.InverseTransformPoint(new Vector3(worldPos.x, y, worldPos.z)); lines.SetPosition(vert, localPos); } }
public void AddHexMesh(float radius, Grid.HexOrientation orientation) { Mesh mesh = new Mesh(); List <Vector3> verts = new List <Vector3>(); List <int> tris = new List <int>(); List <Vector2> uvs = new List <Vector2>(); for (int i = 0; i < 6; i++) { Vector3 pos = Corner(Vector3.zero, radius, i, orientation); Vector3 worldPos = transform.TransformPoint(pos); float y = grid.SampleHeight(worldPos); Vector3 localPos = transform.InverseTransformPoint(new Vector3(worldPos.x, y, worldPos.z)); verts.Add(localPos); } tris.Add(0); tris.Add(2); tris.Add(1); tris.Add(0); tris.Add(5); tris.Add(2); tris.Add(2); tris.Add(5); tris.Add(3); tris.Add(3); tris.Add(5); tris.Add(4); //UVs are wrong, I need to find an equation for calucalting them uvs.Add(new Vector2(0.5f, 1f)); uvs.Add(new Vector2(1, 0.75f)); uvs.Add(new Vector2(1, 0.25f)); uvs.Add(new Vector2(0.5f, 0)); uvs.Add(new Vector2(0, 0.25f)); uvs.Add(new Vector2(0, 0.75f)); mesh.vertices = verts.ToArray(); mesh.triangles = tris.ToArray(); mesh.uv = uvs.ToArray(); mesh.name = "Hexagonal Plane"; mesh.RecalculateNormals(); if (GetComponent <MeshFilter>() == null) { gameObject.AddComponent <MeshFilter>(); } GetComponent <MeshFilter>().mesh = mesh; }
public static Vector3 Corner(Vector3 origin, float radius, int corner, Grid.HexOrientation orientation) { float angle = 60 * corner; if (orientation == Grid.HexOrientation.Pointy) { angle += 30; } angle *= Mathf.PI / 180; return(new Vector3(origin.x + radius * Mathf.Cos(angle), origin.y, origin.z + radius * Mathf.Sin(angle))); }