- Home /
Apply trees On Terrain By Script
i am trying to make a script which can save the position of the trees which has been painted on terrain and can apply it in some other project
it is still in building phase and i am unable to apply trees on a terrain here i need help i can not find any solution of how i can apply trees on terrain while i have only its position Help here would be appreciated Thanks AR
Here is my code f
void Save_tress()
{
Prototype_1_position.Clear();
Prototype_2_position.Clear();
Prototype_3_position.Clear();
Prototype_4_position.Clear();
Terrain[] terrian_save = (Terrain[]) GameObject.FindObjectsOfType(typeof(Terrain));
foreach(Terrain Terra in terrian_save)
{
My_trees = Terra.terrainData.treeInstances;
foreach (TreeInstance tre in My_trees)
{
if(tre.prototypeIndex == 0 )
{
float x = Terra.terrainData.size.x * tre.position.x ;
float y = Terra.terrainData.size.y * tre.position.y ;
float z = Terra.terrainData.size.z * tre.position.z ;
x = x + Terra.transform.position.x ;
y = y + Terra.transform.position.y ;
z = z + Terra.transform.position.z ;
Vector3 abc = new Vector3(x,y,z);
Prototype_1_position.Add(abc);
}
if(tre.prototypeIndex == 1 )
{
float x = Terra.terrainData.size.x * tre.position.x ;
float y = Terra.terrainData.size.y * tre.position.y ;
float z = Terra.terrainData.size.z * tre.position.z ;
x = x + Terra.transform.position.x ;
y = y + Terra.transform.position.y ;
z = z + Terra.transform.position.z ;
Vector3 abc = new Vector3(x,y,z);
Prototype_2_position.Add(abc);
}
if(tre.prototypeIndex == 2 )
{
float x = Terra.terrainData.size.x * tre.position.x ;
float y = Terra.terrainData.size.y * tre.position.y ;
float z = Terra.terrainData.size.z * tre.position.z ;
x = x + Terra.transform.position.x ;
y = y + Terra.transform.position.y ;
z = z + Terra.transform.position.z ;
Vector3 abc = new Vector3(x,y,z);
// Prototype_3_position.Add(abc);
}
if(tre.prototypeIndex == 3 )
{
// Prototype_4_position.Add(abc);
}
if(tre.prototypeIndex == 4 )
{
// Prototype_5_position.Add(abc);
}
if(tre.prototypeIndex == 5 )
{
// Prototype_6_position.Add(abc);
}
Debug.Log(Prototype_1_position.Count);
Debug.Log(Prototype_2_position.Count);
Debug.Log(Prototype_3_position.Count);
}
}
}
void Apply_Trees()
{
Terrain[] terrian_save = (Terrain[]) GameObject.FindObjectsOfType(typeof(Terrain));
foreach(Terrain Terra in terrian_save)
{
foreach(Vector3 newPOs_1 in Prototype_1_position)
{
Instantiate(Tree_prefab_1 ,newPOs_1 ,Quaternion.identity);
}
foreach(Vector3 newPOs_2 in Prototype_2_position)
{
Instantiate(Tree_prefab_2 , newPOs_2 ,Quaternion.identity);
}
foreach(Vector3 newPOs_3 in Prototype_3_position)
{
Instantiate(Tree_prefab_3 , newPOs_3 ,Quaternion.identity);
}
}
}
Comment
Answer by William4458 · Jan 16, 2017 at 03:21 PM
Use raycasts to spawn your trees at the perfect height.