地形的保存和读取和普通读取方式并没有不同
首先保存地形
[MenuItem("Rollback/Save Main Terrain 存储当前地形")]
static void saveTerrain()
{
if (!File.Exists("Assets/Terrain/MainTerrain.data"))
{
File.Create("Assets/Terrain/MainTerrain.data");
}
Terrain terrain = GameObject.Find("Terrain").GetComponent<Terrain>();
StreamWriter sw = new StreamWriter("Assets/Terrain/MainTerrain.data", false);
float[,] heights = terrain.terrainData.GetHeights(0, 0, terrain.terrainData.heightmapHeight, terrain.terrainData.heightmapWidth);
for (int i = 0; i < terrain.terrainData.heightmapHeight - 1; i++)
{
for (int j = 0; j < terrain.terrainData.heightmapWidth - 1; j++)
{
sw.WriteLine(heights[i,j]);
}
}
sw.Close();
}
然后读取和设置地形
[MenuItem("Rollback/Reserve 恢复地形")]
static void reserveTerrain()
{
if (File.Exists("Assets/Terrain/MainTerrain.data"))
{
Terrain terrain = GameObject.Find("Terrain").GetComponent<Terrain>();
StreamReader sr = new StreamReader("Assets/Terrain/MainTerrain.data");
var lines = new List<float>();
float[,] heights = new float[terrain.terrainData.heightmapHeight, terrain.terrainData.heightmapWidth];
for (int i = 0; i < terrain.terrainData.heightmapHeight - 1; i++)
{
for (int j = 0; j < terrain.terrainData.heightmapWidth - 1; j++)
{
heights[i, j] = float.Parse(sr.ReadLine());
}
}
terrain.terrainData.SetHeights(0, 0, heights);
sr.Close();
}
}