public PhysTerrain Bake(Texture2D map) { PhysTerrain bake = new PhysTerrain(); terrain = GetComponent <Terrain>(); var data = terrain.terrainData; int resolusion = map.width; // var heights = data.GetHeights(0, 0, map.width, map.height); float[,] heights = new float[map.width, map.height]; float verticalScale = data.size.y; for (int x = 0; x < map.width; x++) { for (int y = 0; y < map.height; y++) { heights[x, y] = map.GetPixel(x, y).r *verticalScale; // img.SetPixel(x, y, Color.Lerp(Color.black, Color.white, heights[x, y])); } // Debug.Log(heights[x, 5]* verticalScale); } for (int x = 0; x < resolusion - 1; x++) { for (int z = x; z < resolusion; z++) { float h1 = heights[x, z]; float h2 = heights[z, x]; heights[x, z] = h2; heights[z, x] = h1; } } BinaryFormatter bf = new BinaryFormatter(); MemoryStream ms = new MemoryStream(); bf.Serialize(ms, heights); bake.heights = ms.ToArray(); bake.z = data.size.z; bake.x = data.size.x; bake.resolusion = map.width; bake.tag = physTag; if (physTag == "") { bake.tag = transform.name; } bake.position = transform.position.NetworkVector3(); return(bake); }
public PhysTerrain Bake() { PhysTerrain bake = new PhysTerrain(); terrain = GetComponent <Terrain>(); var data = terrain.terrainData; int resolusion = data.heightmapResolution; var heights = data.GetHeights(0, 0, resolusion, resolusion); float verticalScale = data.size.y; for (int x = 0; x < resolusion; x++) { for (int z = 0; z < resolusion; z++) { heights[x, z] *= verticalScale; } } for (int x = 0; x < resolusion - 1; x++) { for (int z = x; z < resolusion; z++) { float h1 = heights[x, z]; float h2 = heights[z, x]; heights[x, z] = h2; heights[z, x] = h1; } } BinaryFormatter bf = new BinaryFormatter(); MemoryStream ms = new MemoryStream(); bf.Serialize(ms, heights); bake.heights = ms.ToArray(); bake.z = data.size.z; bake.x = data.size.x; bake.resolusion = resolusion; return(bake); }