Swap tree prefabs at runtime

I’m trying to write a script that will switch tree prefabs on a terrain when you push a button (young trees become old trees). Trouble is, I’m having a hard time reaching the treetype prefabs in my terrain: I can’t even get to the point of pulling out the names of the existing trees. I’m pretty new to coding, and I’m getting stumped. Help?

var TerrainTest : Terrain;
var testname : Array;

var treeObject : GameObject;
 
var treetypes1 : TreePrototype;

function Start () {
treetypes1.prefab = treeObject;

TerrainTest.terrainData.treePrototypes[0] = treetypes1;

Debug.Log(treetypes1);
}

Alright, I’ve solved my problem, so now to report back for future searchers. Solution courtesy of this thread in the forums.

The trick is to declare a new array of type TreePrototype, use a Resource.Load to add in prefabs, and then swap it with the existing TreePrototype. If done in the editor, this is a persistent change. Ie, if you swap tree1 for tree2 while playing, when you go back into editor mode it’ll still be tree2.

Here’s my pared down code. Remember, prefabs should be placed in a ‘Resources’ folder:

var treeType : TreePrototype[];

function Start(){
	treeType = Terrain.activeTerrain.terrainData.treePrototypes;
}

function Update () {

	if(Input.GetKeyDown("a")){

		treeType[0].prefab = Resources.Load("PrefabName");
		Terrain.activeTerrain.terrainData.treePrototypes = treeType;
	}
}