- Home /
Question by
Marek_Bakalarczuk · Nov 20, 2014 at 07:15 AM ·
terraingrassterraindata
Save terrain grass data
Hi,
I have no idea how to save Unity terrain grass placement data. I can store every other data but not this. Here's my code
TerrainData tdata = new TerrainData ();
tdata.heightmapResolution = ter.terrainData.heightmapResolution;
tdata.size = ter.terrainData.size;
tdata.alphamapResolution = ter.terrainData.alphamapResolution;
tdata.baseMapResolution = ter.terrainData.baseMapResolution;
tdata.SetDetailResolution (ter.terrainData.detailResolution, 8);
// Generate the heightmap
tdata.SetHeights (0, 0, ter.terrainData.GetHeights (0, 0, ter.terrainData.heightmapWidth, ter.terrainData.heightmapHeight));
tdata.splatPrototypes = ter.terrainData.splatPrototypes;
tdata.treePrototypes = ter.terrainData.treePrototypes;
tdata.treeInstances = ter.terrainData.treeInstances;
tdata.wavingGrassAmount = ter.terrainData.wavingGrassAmount;
tdata.wavingGrassSpeed = ter.terrainData.wavingGrassSpeed;
tdata.wavingGrassStrength = ter.terrainData.wavingGrassStrength;
tdata.wavingGrassTint = ter.terrainData.wavingGrassTint;
tdata.GetDetailLayer(0, 0, ter.terrainData.detailWidth, ter.terrainData.detailHeight, 0);
AssetDatabase.CreateAsset(tdata, "Assets/Terrains/"+ter.name+".asset");
AssetDatabase.SaveAssets();
// Now if we have splatmaps for this terrain, time to load them
float[,,] splatarray = ter.terrainData.GetAlphamaps(0,0,ter.terrainData.alphamapWidth-1, ter.terrainData.alphamapHeight-1);
SplatPrototype[] prototypes = ter.terrainData.splatPrototypes;
Debug.Log (ter.terrainData.detailPrototypes.Length);
details = new List<DetailPrototype>();
for(int i = 0; i < ter.terrainData.detailPrototypes.Length; i++) {
DetailPrototype prototype = new DetailPrototype();
prototype.prototype = ter.terrainData.detailPrototypes[i].prototype;
prototype.prototypeTexture = ter.terrainData.detailPrototypes[i].prototypeTexture;
prototype.dryColor = ter.terrainData.detailPrototypes[i].dryColor;
prototype.healthyColor = ter.terrainData.detailPrototypes[i].healthyColor;
prototype.noiseSpread = ter.terrainData.detailPrototypes[i].noiseSpread;
prototype.renderMode = ter.terrainData.detailPrototypes[i].renderMode;
prototype.usePrototypeMesh = ter.terrainData.detailPrototypes[i].usePrototypeMesh;
prototype.minWidth = ter.terrainData.detailPrototypes[i].minWidth;
prototype.maxWidth = ter.terrainData.detailPrototypes[i].maxWidth;
prototype.minHeight = ter.terrainData.detailPrototypes[i].minHeight;
prototype.maxHeight = ter.terrainData.detailPrototypes[i].maxHeight;
details.Add(prototype);
}
TerrainData td = (TerrainData)AssetDatabase.LoadAssetAtPath("Assets/Terrains/"+ter.name+".asset", typeof(TerrainData));
td.splatPrototypes = prototypes;
td.detailPrototypes = details.ToArray();
td.RefreshPrototypes ();
td.SetAlphamaps (0, 0, splatarray);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Debug.Log (td.detailPrototypes.Length);
ter.GetComponent<Terrain> ().terrainData = td;
ter.GetComponent<TerrainCollider> ().terrainData = td;
Comment
Your answer
