using UnityEngine; public class MeshController : TripsitterAve { public int size = 128; public float spacing = 1.0f; public float AudioScale = 10.0f; public float Power = 1.5f; MeshFilter meshFilter; Vector3[] vertices; void Start() { meshFilter = GetComponent(); Generate(); } void Update() { var spectrumData = GetSpectrumData(); Mesh mesh = meshFilter.mesh; Vector3[] vertices = mesh.vertices; for (int i = 0; i < vertices.Length; i++) { int s = i % SpectrumSize; var height = Mathf.Pow(spectrumData[s] * AudioScale, Power); vertices[i].y = height; } mesh.vertices = vertices; mesh.RecalculateBounds(); } private void Generate() { Mesh mesh = new Mesh(); mesh.name = "Audio Mesh"; vertices = new Vector3[(size + 1) * (size + 1)]; for (int i = 0, z = 0; z <= size; z++) { for (int x = 0; x <= size; x++, i++) { vertices[i] = new Vector3(x, 0.0f, z); } } mesh.vertices = vertices; int[] triangles = new int[size * size * 6]; for (int ti = 0, vi = 0, z = 0; z < size; z++, vi++) { for (int x = 0; x < size; x++, ti += 6, vi++) { triangles[ti] = vi; triangles[ti + 3] = triangles[ti + 2] = vi + 1; triangles[ti + 4] = triangles[ti + 1] = vi + size + 1; triangles[ti + 5] = vi + size + 2; } } mesh.triangles = triangles; meshFilter.mesh = mesh; } // private void OnDrawGizmos() { // if (vertices == null) return; // Gizmos.color = Color.black; // for (int i = 0; i < vertices.Length; i++) { // Gizmos.DrawSphere(vertices[i], 0.1f); // } // } }