- Home /
Deleting terrain when out of render distance
I have a game in development where in order to save as much RAM as possible (I'm limited to 2 gigs on stand alone) I need to delete the terrain from the game world when it is not in a 3x3 area of terrain tiles based on player location, and I want the game world to be rather big. I've gotten the terrain to render, but deleting it from the game world is annoying.. Here is basically what I got going on for deleting (testing out what works in this):
//Get level name public TerrainData startTerrain; void Start () { Terrain.CreateTerrainGameObject(startTerrain); } void Update () { if (Input.GetKeyDown("p")) { Terrain.Destroy(startTerrain); } } Destroy(startTerrain); returns an error: "Destroy won't let you delete an asset blah blah blah, use DestroyImmediate to destroy assets...", and DestroyImmediate(startTerrain, true); completely breaks the asset and makes it impossible to use it again until I rename it, which I can't have the end user do... I certainly wouldn't rename the file in a stand alone.
Answer by $$anonymous$$ · Nov 21, 2013 at 01:39 AM
It looks like you're trying to create terrain objects from terrain data on the fly.
That's a very expensive operation, and I would suggest creating prefabs for each terrain tile at authoring time (either using Unity editor or with a script), then instantiating and destroying terrain tiles as the player moves through the scene.
http://docs.unity3d.com/Documentation/ScriptReference/PrefabUtility.CreatePrefab.html
I've experimented with recycling terrain objects with an object pool in the past, but it's actually faster to use Instantiate() than re-loading terrain data into an existing terrain object.
I would also look at some dynamic terrain tiling systems:
http://answers.unity3d.com/questions/552498/simple-mesh-lod-for-terrain.html
I hope this helps!
Thanks! Working beautifully. Stats panel on my desktop says over 3000 frames (which is VERY hard to believe...) and 300 or so on the computer that the stand alone has to run on, and takes up almost no RA$$anonymous$$ which is very nice-going to end up using it all up anyway. I looked into the terrain tiling, but unfortunately it is defeating the purpose of my final computer science project, I have to make this mostly on my own and with standard assets unity comes with.
Your answer
Follow this Question
Related Questions
Correctly Rebuilding Terrain Basemap 2 Answers
Loading terrain files dynamically 3 Answers
How to make a block terrain by hand? 1 Answer
Is my terrain gone forever? 2 Answers
Set RenderQueue for Terrain 2 Answers