Hello,
I’m trying to rotate a terrain in runtime, then I want the terrain to get back to its original rotation when I quit the app.
I have basically this algorithm:
- Copy (“clone”) the Terrain Data
- Rotate that copy
- When quitting, the copy is automatically destroyed, so the terrain should get back to its original data.
The following code implements this algorithm:
using UnityEngine;
public class RotateTerrain : MonoBehaviour
{
[SerializeField]
private Terrain terrain;
void Start()
{
WorkOnNewCopy();
// Now we can safely modify our terrain... Can we?
TerrainRotate(terrain, degrees: 90);
}
void WorkOnNewCopy()
{
TerrainData backup_terrainData = terrain.terrainData;
backup_terrainData.name = terrain.terrainData.name + "_tmp";
backup_terrainData = Instantiate(backup_terrainData);
terrain.terrainData = backup_terrainData;
terrain.GetComponent<TerrainCollider>().terrainData = backup_terrainData;
terrain.Flush();
}
void TerrainRotate(Terrain terrain, float degrees)
{
// Super-secret code
}
}
It’s almost working: when I quit the app (or editor), I find myself with a weird mix between the original terrain, and the modified terrain. Everything seems to be back, except the ground texture (splat map). I feel close to the solution!
Have you got an idea? Thanks in advance! ![]()
(same thread as: How to modify a Terrain at runtime and get back to original Terrain on exit? - Questions & Answers - Unity Discussions)