public void GenerateLevel() { #region Getting refs to components meshFilter = GetComponent <MeshFilter>(); meshCollider = GetComponent <MeshCollider>(); meshRenderer = GetComponent <MeshRenderer>(); #endregion #region Generating offset, heightMap, texture and mesh var verts = meshFilter.mesh.vertices; var levelSize = (int)Mathf.Sqrt(verts.Length); var offset = new Vector2( -transform.position.x / transform.localScale.x, -transform.position.z / transform.localScale.z ) + globalOffset; float[,] heightMap; if (simple) { //print("Level gened simple!"); heightMap = NoiseMap.Get(levelSize, levelSize, mapScale, offset); } else { //print("Level gened with waves!"); heightMap = NoiseMap.GetComplex(levelSize, levelSize, mapScale, offset, waves); } var texture = NoiseMap.AsColorTexture(heightMap, terrainColors, terrainColorThresholds); if (meshRenderer) { meshRenderer.material.mainTexture = texture; } for (int z = 0, vertInd = 0; z < levelSize; z++) { for (var x = 0; x < levelSize; x++, vertInd++) { var height = heightMap[z, x]; var vertex = verts[vertInd]; verts[vertInd] = new Vector3(vertex.x, heightCurve.Evaluate(height) * heightMultiplier, vertex.z); } } #endregion #region Applying all the stuff meshFilter.mesh.vertices = verts; meshFilter.mesh.RecalculateNormals(); meshFilter.mesh.RecalculateBounds(); if (meshCollider) { meshCollider.sharedMesh = meshFilter.mesh; } #endregion }