Terrain Splatprototypes - Trouble changing textures through external GUI.
Hello, i have been working on some terrain functionality and i have been trying to write an editor to get quick access to "Add Terrain Texture" and "Edit Terrain Texture".
i have been following this article http://answers.unity3d.com/questions/351857/programatically-changing-the-tilesize-of-a-splatpr.html however can't seem to get the terrain to change textures in 5.2.3.
this is my code so far.
void EditMenu(int i)
{
SplatPrototype splatMapData = t.terrainData.splatPrototypes [i];
SplatPrototype newSplatMap = new SplatPrototype();
Rect ProgressBox;
int spacing = 3;
float s = 120;
Rect r;
newSplatMap.texture = splatMapData.texture;
newSplatMap.normalMap = splatMapData.normalMap;
newSplatMap.tileOffset = splatMapData.tileOffset;
newSplatMap.tileSize = splatMapData.tileSize;
GUILayout.BeginVertical("box");
GUILayout.BeginHorizontal ("label");
// diffuse texture
ProgressBox = EditorGUILayout.BeginVertical(GUILayout.MaxWidth(s));
r = new Rect(ProgressBox.x + spacing, ProgressBox.y + spacing, ProgressBox.width - spacing*2, ProgressBox.width - spacing*2);
newSplatMap.texture = (Texture2D) EditorGUI.ObjectField(r, newSplatMap.texture, typeof(Texture2D), true);
GUILayout.Space(s);
EditorGUILayout.EndVertical();
// normal texture
ProgressBox = EditorGUILayout.BeginVertical(GUILayout.MaxWidth(s));
r = new Rect(ProgressBox.x + spacing, ProgressBox.y + spacing, ProgressBox.width - spacing*2, ProgressBox.width - spacing*2);
newSplatMap.normalMap = (Texture2D) EditorGUI.ObjectField(r, newSplatMap.normalMap, typeof(Texture2D), true);
GUILayout.Space(s);
EditorGUILayout.EndVertical();
GUILayout.EndHorizontal ();
// offset
newSplatMap.tileOffset = EditorGUILayout.Vector2Field("Tile Offset:", newSplatMap.tileOffset);
// scale
newSplatMap.tileSize = EditorGUILayout.Vector2Field("Tile Offset:", newSplatMap.tileSize);
//end button
if(GUILayout.Button("Done",GUILayout.Height (16)))
{
myScript.SplatMapConstraints [i].editTexture = !myScript.SplatMapConstraints [i].editTexture ;
}
GUILayout.EndVertical();
Debug.Log(newSplatMap.texture.name);
t.terrainData.splatPrototypes [i] = newSplatMap;
t.terrainData.RefreshPrototypes();
t.Flush();
}
it runs, however the values snap back. this function sits in a for loop to go through the texture and t = terrain
Is there anything i am missing or is there a way to open "Add Terrain Texture" and "Edit Terrain Texture" menus through code so i don't have to make my own. thank you for your help.
Your answer
Follow this Question
Related Questions
Fast way to texture a 10km map? 1 Answer
How to get rid of holes in terrain? 2 Answers
How to spawn in loop like snail but in square 0 Answers
How to hide faces of a mesh that I dont see? 1 Answer
Proceduraly generated rivers 0 Answers