protected virtual void Update() { if (meshFilter == null) { meshFilter = GetComponent <MeshFilter>(); } if (mesh == null) { mesh = new Mesh(); mesh.hideFlags = HideFlags.DontSave; } // Prevent this from dirtying the scene when exiting play mode D2D_Helper.StealthSet(meshFilter, mesh); // Generate positions? if (positions == null || positions.Length != WaveCount * 3 + 3) { positions = new Vector3[WaveCount * 3 + 3]; } // Generate colours? if (colours == null || colours.Length != WaveCount * 3 + 3) { colours = new Color[WaveCount * 3 + 3]; } for (var i = 0; i <= WaveCount; i++) { colours[i * 3 + 0] = WaveColour; colours[i * 3 + 1] = SeaColour; colours[i * 3 + 2] = SeaColour; } // Generate uvs? if (uvs == null || uvs.Length != WaveCount * 3 + 3) { uvs = new Vector2[WaveCount * 3 + 3]; } // Generate indices? if (indices == null || indices.Length != WaveCount * 12) { indices = new int[WaveCount * 12]; for (var i = 0; i < WaveCount; i++) { // Wave indices[i * 12 + 0] = i * 3 + 0; indices[i * 12 + 1] = i * 3 + 1; indices[i * 12 + 2] = i * 3 + 3; indices[i * 12 + 3] = i * 3 + 4; indices[i * 12 + 4] = i * 3 + 3; indices[i * 12 + 5] = i * 3 + 1; // Sea indices[i * 12 + 6] = i * 3 + 1; indices[i * 12 + 7] = i * 3 + 2; indices[i * 12 + 8] = i * 3 + 4; indices[i * 12 + 9] = i * 3 + 5; indices[i * 12 + 10] = i * 3 + 4; indices[i * 12 + 11] = i * 3 + 2; } } // Make waves move? if (NoiseTex != null) { WaveAge += WaveSpeed * Time.deltaTime; var halfSize = WaveCount * WaveWidth * 0.5f; for (var i = 0; i <= WaveCount; i++) { var sample = NoiseTex.GetPixelBilinear(WaveOffset + i * WaveFrequency, WaveAge).r - 0.5f; var x = i * WaveWidth - halfSize; var y = sample * 2.0f * WaveAmplitude; positions[i * 3 + 0] = new Vector3(x, y, 0.0f); positions[i * 3 + 1] = new Vector3(x, y - WaveThickness, 0.0f); positions[i * 3 + 2] = new Vector3(x, y - SeaDepth, 0.0f); } } // Update mesh mesh.Clear(); mesh.vertices = positions; mesh.colors = colours; mesh.triangles = indices; mesh.uv = uvs; mesh.RecalculateBounds(); mesh.RecalculateNormals(); }